Wie erstelle ich benutzerdefinierte 401, 403 und 500 Fehlerseiten?

27

Wenn ein 404-Fehler auftritt, kann eine 404.php-Vorlagendatei zum Rendern einer benutzerdefinierten Fehlermeldung verwendet werden. Dies ist in der Vorlagenhierarchie dokumentiert Artikel .

Mein Ziel ist es, benutzerdefinierte Fehlerseiten für 401, 403 und 500 Fehler zu erstellen. Ich habe versucht, 401.php-, 403.php- und 500.php-Dateien im Verzeichnis meines Themas zu erstellen, aber das funktioniert nicht.

Wie kann ich benutzerdefinierte 401, 403 und 500 Fehlerseiten in WordPress erstellen?

Henrywright
quelle
2
Sie können versuchen, diesen Code als Ausgangspunkt zu verwenden: jesin.tk/wordpress-custom-403-401-error-page
Joe
Hier ist ein vorhandenes Plugin, mit dem Sie Fehlerseiten wie 403- und 401-Fehler anpassen können: http://wordpress.org/plugins/custom-error-pages/ Alles, was Sie tun müssen, ist zu installieren und zu aktivieren. Sie müssen jedoch die auf der Seite mit den Plug-in-Optionen angegebene .htaccess-Datei (oder nginx.conf-Datei) manuell bearbeiten.
Pi Lover

Antworten:

15

Fehlerseiten werden über .HTACCESS bereitgestellt. Wenn Sie Apache verwenden, würden Sie die ErrorDocumentDirektive verwenden und den Status und die URL hinzufügen.

So würde es in Ihrer .htaccess-Datei aussehen:

ErrorDocument 401 http://yourwebsite.com/error-401
ErrorDocument 403 http://yourwebsite.com/error-403
ErrorDocument 500 http://yourwebsite.com/error-500

Sie können die folgende Funktion verwenden. Dadurch wird dynamisch hinzugefügt, was für Sie in der HTACCESS-Datei benötigt wird, oder Sie können dies manuell tun.

1. Seiten hinzufügen:

Sie müssten dann in Ihr Dashboard gehen und die Seiten wie jede normale Seite erstellen ('Dashboard'> 'Seiten'> 'Neu'). Sie können mit beliebigen Titeln versehen werden. Vergewissern Sie sich jedoch, dass der Slug mit der unten angegebenen Funktion übereinstimmt (Slug: Fehler-401, Fehler-403, Fehler-404, Fehler-500). Sie können auch eine Seitenvorlage verwenden, um das gewünschte Layout und den gewünschten Stil für diese speziellen Seiten zu erstellen. Folgen Sie dazu den Anweisungen von WordPress Codex .

2. Funktion hinzufügen:

// Create Custom Error Pages in WordPress using HTACCESS
function royal_custom_error_pages() {

    // Get HTACCESS path & dynamic website url
    $htaccess_file = '.htaccess';
    $website_url = get_bloginfo('url').'/';

    // Check & prevent writing error pages more than once
    $check_file = file_get_contents($htaccess_file);
    $this_string = '# BEGIN WordPress Error Pages';

    if( strpos( $check_file, $this_string ) === false) {

    // Setup Error page locations dynamically
    $error_pages .= PHP_EOL. PHP_EOL . '# BEGIN WordPress Error Pages'. PHP_EOL. PHP_EOL;
    $error_pages .= 'ErrorDocument 401 '.$website_url.'error-401'.PHP_EOL;
    $error_pages .= 'ErrorDocument 403 '.$website_url.'error-403'.PHP_EOL;
    $error_pages .= 'ErrorDocument 404 '.$website_url.'error-404'.PHP_EOL;
    $error_pages .= 'ErrorDocument 500 '.$website_url.'error-500'.PHP_EOL;
    $error_pages .= PHP_EOL. '# END WordPress Error Pages'. PHP_EOL;

    // Write the error page locations to HTACCESS
    $htaccess = fopen( $htaccess_file, 'a+');
    fwrite( $htaccess, $error_pages );
    fclose($htaccess);

    }
}

add_action('init','royal_custom_error_pages'); // This will run the function everytime, not ideal!

// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Using a plugin, runs only once!

NB !! HINWEISE ZUR OBEN GENANNTEN FUNKTION

Wenn Sie Ihre Website verschieben oder die URL-Struktur ändern

Bei der obigen Funktion ist zu beachten, dass vor dem Schreiben in Ihre HTACCESS-Datei überprüft wird, ob die ErrorDocument-Direktiven bereits vorhanden sind. Die ErrorDocument-Direktiven werden jedoch nicht neu geschrieben, wenn Sie Ihr Blog ändern oder verschieben, um die aktualisierten Seitenpositionen widerzuspiegeln. Sie müssten zuerst die vorhandenen ErrorDocument-Anweisungen in Ihrer HTACCESS-Datei löschen und diese Funktion dann erneut ausführen, um die neuen Anweisungen zu erstellen.

Korrigieren Sie den Haken, um die Funktion NUR EINMAL auszulösen

Die andere Sache, die zu beachten ist, ist diese Funktion, die die initAktion jedes Mal ausführt, wenn Ihre Seiten geladen werden, was überflüssig und verschwenderisch ist. Daher würde ich vorschlagen, sie einem Plugin hinzuzufügen und die Funktion register_activation_hookeher zu verwenden, damit sie nur einmal bei der Aktivierung des Plugins ausgelöst wird

Dateiberechtigungen

Es ist auch unbedingt erforderlich, dass Ihre .htaccess-Datei beschreibbar ist, wenn Sie die oben genannte Funktion verwenden. Vergewissern Sie sich daher, dass sie über die richtigen Dateiberechtigungen verfügt, z. B. CHMOD777.

Matt Royal
quelle
Sie sind sich nicht sicher, wie dies funktionieren soll, haben die Änderungen manuell an der .htaccess-Datei vorgenommen, dies funktioniert jedoch nicht. Ich versuche dies auf localhost zu tun und dies sollte auf localhost möglich sein, da ich Zugriff auf alles, den Server und den Client habe. Aber warum funktioniert das nicht?
Solomon Closson
@SolomonClosson, vielleicht kannst du versuchen, das Plugin zu verwenden, das ich dafür geschrieben habe. Es erledigt alles für dich und folgt genau dem obigen Code :). Offizielles WordPress.Org Plugin
Matt Royal
@MattRoyal Die Funktion funktioniert hervorragend und ich verwende sie, um andere HTAccess-Regeln zu erstellen. Wie kann ich dafür sorgen, dass die Regeln ganz oben in die Datei eingefügt werden, bitte oberhalb der Standard-WP-HTAccess-Regeln? Im Moment werden die Regeln am Ende der htaccess-Datei hinzugefügt. Vielen Dank.
Lowtechsun
Ich bin mit der Lösung nicht einverstanden: 1- Sie sollten nichts auf einem Webserver 777! Das ist im Allgemeinen nur eine schlechte Praxis und führt zu großen Sicherheitslücken. 2- Sie fügen eine Datei hinzu, die bei jeder Anfrage auf die Website geschrieben wird. Als Schreibaktion wird eine Sperre für die Datei erstellt, die nur ein Schreiben zu dem Zeitpunkt ermöglicht, an dem Sie die Anzahl der Anfragen verringern und gleichzeitig antworten. 3- Eine Website sollte keine Abhängigkeiten von dem Server haben, auf dem sie ausgeführt wird. Wenn sie beispielsweise auf ein System migriert wird, auf dem nginx verwendet wird, funktioniert sie nicht mehr wie erwartet. ... geht weiter
Eduardo Oliveira
4- Es gibt sauberere Möglichkeiten, Fehler zu erfassen stackoverflow.com/a/34619308/768516
Eduardo Oliveira