Come creare pagine di errore personalizzate 401, 403 e 500?
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?

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.

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?

@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

@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.

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

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