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

1 mag 2014, 14:44:47
Visualizzazioni: 38.6K
Voti: 30

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

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

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

2
Commenti

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

Joe Joe
1 mag 2014 14:48:21

Ecco un plugin esistente che ti permette di personalizzare le pagine di errore come gli errori 403 e 401: http://wordpress.org/plugins/custom-error-pages/ Tutto quello che devi fare è installarlo e attivarlo. Tuttavia, devi modificare manualmente il file .htaccess (o nginx.conf) specificato nella pagina delle opzioni del plugin.

Pi Lover Pi Lover
1 mag 2014 16:56:14
Tutte le risposte alla domanda 1
5
17

Le pagine di errore vengono servite tramite .HTACCESS, se stai utilizzando Apache dovresti usare la direttiva ErrorDocument e aggiungere lo status e l'URL.

Quindi nel tuo file .htaccess apparirà così:

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

Potresti utilizzare la seguente funzione. Questa aggiungerà dinamicamente ciò che è necessario al file HTACCESS oppure potresti farlo manualmente.

1. Aggiungi Pagine:

Dovrai poi andare nella tua Dashboard e creare le Pagine come una normale pagina ('Dashboard' > 'Pagine' > 'Nuova'). Possono essere intitolate come preferisci, assicurati solo che lo slug sia lo stesso della funzione sottostante (Slug: error-401, error-403, error-404, error-500). Puoi anche utilizzare un template di pagina per creare il layout e lo stile che desideri per queste pagine specifiche. Segui le istruzioni del WordPress Codex per questo.

2. Aggiungi Funzione:

// Crea Pagine di Errore Personalizzate in WordPress utilizzando HTACCESS
function royal_custom_error_pages() {

    // Ottieni il percorso di HTACCESS & l'url dinamico del sito
    $htaccess_file = '.htaccess';
    $website_url = get_bloginfo('url').'/';

    // Controlla & previeni la scrittura delle pagine di errore più di una volta
    $check_file = file_get_contents($htaccess_file);
    $this_string = '# BEGIN WordPress Error Pages';

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

    // Imposta dinamicamente le posizioni delle pagine di errore
    $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;

    // Scrivi le posizioni delle pagine di errore su HTACCESS
    $htaccess = fopen( $htaccess_file, 'a+');
    fwrite( $htaccess, $error_pages );
    fclose($htaccess);

    }
}

add_action('init','royal_custom_error_pages'); // Questa eseguirà la funzione ogni volta, non ideale!

// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Utilizzando un plugin, esegue solo una volta!

NB!! NOTE SULLA FUNZIONE SOPRASTANTE

Quando sposti il tuo sito o cambi la struttura dell'URL

Da ricordare con la funzione sopra è che, sebbene controlli se le direttive ErrorDocument esistono già prima di scriverle nel tuo file HTACCESS, non riscriverà le direttive ErrorDocument nel caso in cui cambiassi o spostassi il tuo blog per riflettere le nuove posizioni delle pagine. Dovresti eliminare le direttive ErrorDocument esistenti nel tuo file HTACCESS prima e poi rieseguire questa funzione per crearne di nuove.

Hook corretto per eseguire la funzione SOLO UNA VOLTA

L'altra cosa da notare è che questa funzione, utilizzando l'azione init, verrà eseguita ogni volta che le tue pagine vengono caricate, il che è superflue e inefficiente, quindi suggerirei di aggiungerla a un plugin e utilizzare register_activation_hook in modo che venga eseguita solo una volta all'attivazione del plugin.

Permessi dei File

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

20 giu 2014 21:12:03
Commenti

Non sono sicuro di come dovrebbe funzionare, ho modificato manualmente il file .htaccess, ma non funziona. Sto provando a farlo su localhost e dovrebbe essere possibile su localhost, dato che ho accesso a tutto, sia al server che al client. Ma perché non funziona?

Solomon Closson Solomon Closson
26 apr 2016 06:34:18

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

Matt Royal Matt Royal
26 apr 2016 11:04:19

@MattRoyal La funzione funziona benissimo e la sto usando per creare altre regole htaccess. Come posso fare in modo che le regole vengano inserite proprio in cima al file, sopra le regole predefinite di wp htaccess? Al momento le regole vengono aggiunte in fondo al file htaccess. Grazie.

lowtechsun lowtechsun
12 feb 2018 17:27:20

Non sono d'accordo con la soluzione: 1- NON DOVRESTI impostare 777 su nessun file in un webserver! È una pessima pratica in generale e crea gravi falle di sicurezza. 2- Stai aggiungendo una scrittura su file per ogni richiesta al sito, essendo un'operazione di scrittura creerà un lock sul file permettendo solo una scrittura alla volta, riducendo il numero di richieste che puoi gestire contemporaneamente. 3- Un sito web non dovrebbe avere dipendenze dal server su cui gira, se viene migrato su un sistema che usa nginx per esempio, smetterà di funzionare come previsto. ...continua

Eduardo Oliveira Eduardo Oliveira
10 set 2019 12:41:48

4- Ci sono modi più puliti per catturare gli errori https://stackoverflow.com/a/34619308/768516

Eduardo Oliveira Eduardo Oliveira
10 set 2019 12:45:32