Leiten Sie die gesamte Website auf eine einzelne Seite um

10

Ich muss eine ganze WordPress-Site auf eine einzelne WordPress-Seite umleiten. Eine Art Wartungsmodus, aber die Weiterleitung muss zu einer veröffentlichten WordPress-Seite gehen. Leider muss die Wartungsseite, die ich anzeigen muss, andere WordPress-Plugins verwenden.

Mir ist kein Plugin für den Wartungsmodus bekannt, mit dem Sie dies tun können. Sie können höchstens benutzerdefinierten HTML / CSS-Code schreiben.

Ich habe über eine .htaccess mod_rewrite-Regel nachgedacht. Ich bin jedoch sehr schwach mit mod_rewrite.

Zuerst habe ich kanonische Weiterleitungen deaktiviert .

Dann habe ich versucht zu verwenden:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index.php?page_id=813$
RewriteRule ^(.*)$ /index.php?page_id=813 [R=307,L]

Diese Regeln erzeugen jedoch Umleitungsschleifen. page_id=813ist natürlich die ID meiner Wartungsseite.

Ist jemandem ein Plugin für den Wartungsmodus bekannt, das auf eine veröffentlichte Seite umleitet?

Kann mir alternativ jemand helfen, die mod_rewrite-Regeln zu korrigieren? Zusätzlicher Beifall, wenn wir /wp-admindie Weiterleitungsregeln nicht berücksichtigen können.

Shea
quelle

Antworten:

14

Sie können dies tatsächlich in WordPress selbst tun, anstatt sich ein verwirrendes und überentwickeltes .htaccess-Update einfallen zu lassen.

Wir können uns in den template_redirectFilter einhängen , der nur am Frontend ausgelöst wird (nicht in wp-admin). Wir verwenden dann die is_page()Funktion, um zu überprüfen, ob eine Seite mit der ID 813 angezeigt wird. Wenn nicht, leiten Sie diese wp_redirect()Funktion mit dieser Funktion weiter.

add_action( 'template_redirect', function() {
    if ( is_page( 813 ) ) {
        return;
    }

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ) );
    exit;
} );

Dies funktioniert hervorragend für einen Wartungsmodus, da die Umleitung mit dem temporären HTTP-Header 302 erfolgt und Bots und Suchmaschinen wissen, dass Ihre Site bald verfügbar sein wird. Wenn Sie die Site jedoch permanent verschieben, möchten Sie möglicherweise einen permanenten 301-HTTP-Header für die Umleitung verwenden. Sie können dies tun, indem Sie der wp_redirectFunktion einen zweiten Parameter hinzufügen . Beispiel:

add_action( 'template_redirect', function() {
    if ( is_page( 813 ) ) {
        return;
    }

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ), 301 );
    exit;
} );
Shea
quelle
Das funktioniert auch gut für meinen Zweck. Abgesehen von einem Twist - die Seite ist endgültig "down" und ich möchte WP am Laufen halten und die Abschiedsseite als Homepage bereitstellen. Gibt es eine Möglichkeit, dieser Art der Weiterleitung für SEO einen 301-Header hinzuzufügen?
Tapefreak
@Tapefreak Sie können den HTTP-Header als zweiten Parameter der wp_redirectFunktion festlegen . Beispiel:wp_redirect( home_url( 'index.php?page_id=183' ), 301 );
Shea
1

Ich habe die akzeptierte Antwort von @shea in ein Ein-Datei-Plugin eingebettet und zwei Optionen hinzugefügt: Nur Nicht-Administrator-Benutzer umleiten und zu einer beliebigen URL umleiten.

Bei Interesse können Sie das Plugin von Github herunterladen => https://github.com/Idearia/wp-redirect-website-to-url .

Optionen

Die Plugin-Optionen sind sehr einfach; Derzeit sind sie in der Plugin-Datei fest codiert, aber ich könnte in Betracht ziehen, eine Optionsseite zu erstellen, wenn Leute dies anfordern:

  • DESTINATION_URL : Die vollständige URL, unter der Benutzer umgeleitet werden sollen. kann eine Seite außerhalb der Website-Domain sein.
  • DESTINATION_URL_ID : Wenn die Umleitungs-URL eine WordPress-Seite oder ein Beitrag ist, geben Sie hier die WordPress-ID an.
  • USER_CAPABILITY : Benutzer mit dieser Funktion werden nicht umgeleitet. Lassen Sie das Feld leer, um alle umzuleiten. Standard ist 'manage_options', das für Administratorbenutzer aktiviert ist.
  • REDIRECT_STATUS_CODE : Umleitungsstatus: 302 für temporäre Umleitung, 301 für permanente Umleitung.
  • DEBUG : Gibt an, ob Debug-Informationen in debug.log gedruckt werden sollen.

Aktualisierte Informationen auf der Github-Seite => https://github.com/Idearia/wp-redirect-website-to-url .

Bitte beachten Sie, dass das Plugin sehr einfach ist; Fortgeschrittene Benutzer könnten stattdessen eines der vielen Wartungs-Plugins in Betracht ziehen, die im WordPress.org-Plugin-Repository verfügbar sind.

Lassen Sie mich wissen, wenn Sie Probleme beim Ausführen des Plugins haben 😊

Guido Walter Pettinari
quelle
0

Ich würde mich für eine viel einfachere Lösung entscheiden. Ich gehe davon aus, dass Sie möchten, dass nur eine Seite angezeigt wird - keine WP-Seite muss sichtbar sein -, wenn Sie eine Anfrage für Ihre Domain stellen.

Warum also nicht eine HTML-Seite erstellen, sie mit etwas CSS formatieren und diese Seite in einem anderen Ordner auf Ihrer Hosting-Plattform ablegen? Stellen Sie sicher, dass die Seite so aussieht, wie Sie es möchten.

Zeigen Sie dann einfach mit Ihrer Domain auf diesen neuen Ordner. Bei den meisten Hosting-Plattformen können Sie den Basisordner einer Domain angeben. Zeigen Sie also mit Ihrer Domain auf diesen neuen Basisordner. Keine komplizierten htaccess-Weiterleitungen, WP-Plugins oder speziellen Filter zum Einbinden in WP erforderlich.

Sie können auch den gesamten Inhalt aus den aktuellen Domänenstammordnern verschieben und an deren Stelle Ihre einfache HTML-Datei einfügen.

Mögen Hosting-Orte auch eine "globale Weiterleitung" für jede Anfrage an eine Seite Ihrer Domain haben.

In beiden Fällen wäre es eine einfache Lösung für Ihre Anforderungen, nur eine Seite für Ihre gesamte Domain zu haben.

Wenn Sie wirklich eine htaccess-Lösung wünschen, verwenden Sie diese:

RewriteEngine on

RewriteRule ^(.*)$ http://www.example.com/  [R=permanent,L]

..ersetzt durch Ihre eigentliche Domain. Macht SEO auch glücklich.

Rick Hellewell
quelle