Come creare pagine di errore personalizzate 401, 403 e 500?


27

Quando si verifica un errore 404, è possibile utilizzare un file modello 404.php per visualizzare un messaggio di errore personalizzato. Questo è documentato nell'articolo Gerarchia dei modelli .

Il mio obiettivo è creare pagine di errore personalizzate per errori 401, 403 e 500. Ho provato a creare file 401.php, 403.php e 500.php nella directory del mio tema, ma questo non funziona.

Come posso creare pagine di errore 401, 403 e 500 personalizzate in WordPress?


2
Potresti provare a usare questo codice come punto di partenza: jesin.tk/wordpress-custom-403-401-error-page
Joe

Ecco un plug-in esistente che ti consente di personalizzare le pagine di errore come errori 403 e 401: http://wordpress.org/plugins/custom-error-pages/ Tutto ciò che devi fare è installare e attivare. Tuttavia, devi modificare manualmente il file .htaccess (o nginx.conf) specificato nella pagina delle opzioni dei plug-in.
Pi Lover,

Risposte:


15

Le pagine di errore vengono visualizzate tramite .HTACCESS, se si utilizza Apache si utilizza la ErrorDocumentdirettiva e si aggiunge lo stato e l'URL.

Quindi sembrerebbe così nel tuo file .htaccess:

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

È possibile utilizzare la seguente funzione di seguito. Questo aggiungerà dinamicamente ciò che è necessario al file HTACCESS per te o potresti farlo manualmente.

1. Aggiungi pagine:

Dovresti quindi accedere alla tua Dashboard e creare le Pagine come una normale pagina ("Dashboard"> "Pagine"> "Nuovo"). Possono essere intitolati come vuoi, assicurati che lo slug sia lo stesso della funzione di seguito (Slug: errore-401, errore-403, errore-404, errore-500). Inoltre puoi utilizzare il modello di pagina per creare qualsiasi layout e stile desideri per queste pagine specifiche. Seguire le istruzioni per WordPress Codex per questo.

2. Aggiungi funzione:

// 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 !! NOTE SULLA FUNZIONE SOPRA

Quando si sposta il sito Web o si modifica la struttura dell'URL

La cosa da ricordare con la funzione sopra è anche se verificherà se le direttive ErrorDocument esistono già prima di scriverle nel tuo file HTACCESS, non riscriverà le direttive ErrorDocument se dovessi cambiare o spostare il tuo blog in modo da riflettere le posizioni delle pagine aggiornate. Dovresti prima eliminare le direttive ErrorDocument esistenti nel tuo file HTACCESS e quindi rieseguire questa funzione per creare le nuove direttive.

Hook corretto per attivare la funzione SOLO UNA VOLTA

L'altra cosa da notare è questa funzione, l'utilizzo initdell'azione verrà eseguito ogni volta che le pagine vengono caricate, il che è super inutile e dispendioso, quindi suggerirei di aggiungerlo a un plug-in e di usarlo register_activation_hookpiuttosto che si attivi solo una volta all'attivazione del plug-in

Autorizzazioni file

Inoltre è indispensabile che il tuo .htaccess sia scrivibile quando usi la funzione sopra, quindi assicurati che abbia i permessi dei file corretti, qualcosa come CHMOD777.


Non sono sicuro di come funzioni, le modifiche sono state apportate manualmente al file .htaccess, ma non funziona. Sto provando a farlo su localhost e questo dovrebbe essere possibile su localhost, dato che ho accesso a tutto, al server e al client. Ma perché questo non funziona?
Solomon Closson,

@SolomonClosson, forse puoi provare a utilizzare il plugin che ho scritto per questo, farà tutto per te e segue esattamente il codice sopra :). Plugin WordPress.Org ufficiale
Matt Royal

@MattRoyal La funzione funziona benissimo e la sto usando per creare altre regole htaccess. Come posso inserire le regole nella parte superiore del file, sopra le regole predefinite di wp htaccess per favore? Al momento le regole vengono aggiunte in fondo al file htaccess. Grazie.
lowtechsun,

Non sono d'accordo con la soluzione: 1- NON DOVREBBE 777 nulla su un server web! Questa è solo una cattiva pratica in generale e porta a gravi buchi di sicurezza. 2- Stai aggiungendo una scrittura di file su ogni richiesta al sito Web, essendo un'azione di scrittura creerà un blocco sul file permettendo una sola scrittura alla volta ridurrai il numero di richieste e risponderai contemporaneamente. 3- Un sito Web non dovrebbe avere dipendenze del server in cui viene eseguito, se viene migrato su un sistema in cui viene utilizzato nginx, ad esempio, smetterà di funzionare come previsto. ... continua
Eduardo Oliveira il

4- Ci sono modi più puliti di grabing errori stackoverflow.com/a/34619308/768516~~V~~aux~~plural~~3rd
Eduardo Oliveira
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.