Cum să creezi pagini personalizate pentru erorile 401, 403 și 500?
Când apare o eroare 404, poate fi folosit un fișier șablon 404.php pentru a afișa un mesaj de eroare personalizat. Acest lucru este documentat în articolul despre Ierarhia Șabloanelor.
Scopul meu este să creez pagini de eroare personalizate pentru erorile 401, 403 și 500. Am încercat să creez fișierele 401.php, 403.php și 500.php în directorul temei mele, dar acest lucru nu funcționează.
Cum pot crea pagini de eroare personalizate pentru 401, 403 și 500 în WordPress?

Paginile de eroare sunt servite prin .HTACCESS, dacă utilizați Apache, ați folosi directiva ErrorDocument
și ați adăuga statusul și URL-ul corespunzător.
Deci, în fișierul .htaccess ar arăta astfel:
ErrorDocument 401 http://yourwebsite.com/error-401
ErrorDocument 403 http://yourwebsite.com/error-403
ErrorDocument 500 http://yourwebsite.com/error-500
Puteți utiliza funcția de mai jos. Aceasta va adăuga automat ceea ce este necesar în fișierul HTACCESS sau puteți face acest lucru manual.
1. Adăugați Pagini:
Apoi, trebuie să accesați Panoul de control și să creați Paginile ca orice pagină normală ('Panou de control' > 'Pagini' > 'Pagina nouă'). Acestea pot fi intitulate după cum doriți, dar asigurați-vă că slug-ul este același ca în funcția de mai jos (Slug: error-401, error-403, error-404, error-500). De asemenea, puteți utiliza un șablon de pagină pentru a crea orice aspect și stil doriți pentru aceste pagini specifice. Urmați instrucțiunile din WordPress Codex pentru aceasta.
2. Adăugați Funcția:
// Creați Pagini de Eroare Personalizate în WordPress folosind HTACCESS
function royal_custom_error_pages() {
// Obțineți calea HTACCESS și URL-ul dinamic al site-ului
$htaccess_file = '.htaccess';
$website_url = get_bloginfo('url').'/';
// Verificați și preveniți scrierea paginilor de eroare de mai multe ori
$check_file = file_get_contents($htaccess_file);
$this_string = '# BEGIN WordPress Error Pages';
if( strpos( $check_file, $this_string ) === false) {
// Configurați locațiile paginilor de eroare dinamic
$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;
// Scrieți locațiile paginilor de eroare în HTACCESS
$htaccess = fopen( $htaccess_file, 'a+');
fwrite( $htaccess, $error_pages );
fclose($htaccess);
}
}
add_action('init','royal_custom_error_pages'); // Aceasta va rula funcția de fiecare dată, nu este ideal!
// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Dacă utilizați un plugin, rulează o singură dată!
ATENȚIE!! NOTE DESPRE FUNCȚIA DE MAI SUS
Când mutați site-ul sau schimbați structura URL-ului
Important de reținut este că, deși funcția de mai sus va verifica dacă directivele ErrorDocument există deja înainte de a le scrie în fișierul HTACCESS, nu va rescrie directivele ErrorDocument dacă schimbați sau mutați blogul pentru a reflecta noile locații ale paginilor. Va trebui să ștergeți mai întâi directivele existente din fișierul HTACCESS și apoi să reluați această funcție pentru a crea noile directive.
Hook-ul corect pentru a declanșa funcția DOAR O DATĂ
Un alt aspect de reținut este că această funcție, folosind acțiunea init
, va rula de fiecare dată când se încarcă paginile, ceea ce este inutil și risipitor. Așadar, vă sugerez să o adăugați într-un plugin și să folosiți register_activation_hook
pentru a declanșa funcția doar o singură dată, la activarea pluginului.
Permisiuni de Fișier
De asemenea, este imperativ ca fișierul .htaccess să fie scriabil atunci când utilizați funcția de mai sus, așa că asigurați-vă că are permisiunile corecte, cum ar fi CHMOD777.

Nu sunt sigur cum ar trebui să funcționeze acest lucru, am făcut modificările manual în fișierul .htaccess, dar nu funcționează. Încerc să fac asta pe localhost și ar trebui să fie posibil pe localhost, deoarece am acces la tot, atât serverul cât și clientul. Dar de ce nu funcționează?

@SolomonClosson, poți încerca să folosești plugin-ul pe care l-am scris pentru asta, va face totul pentru tine și urmează exact codul de mai sus :). Plugin oficial WordPress.Org

@MattRoyal Funcția funcționează excelent și o folosesc pentru a crea alte reguli htaccess. Cum pot face ca regulile să fie inserate chiar în partea de sus a fișierului, deasupra regulilor implicite wp htaccess? Momentan, regulile sunt adăugate la sfârșitul fișierului htaccess. Mulțumesc.

Nu sunt de acord cu soluția: 1- NU AR TREBUI să setați permisiunile 777 pe un server web! Aceasta este o practică proastă în general și duce la vulnerabilități majore de securitate. 2- Adăugați o operație de scriere a fișierului la fiecare cerere către site, fiind o acțiune de scriere va crea un blocaj pe fișier permițând doar o singură scriere în același timp, reducând numărul de cereri pe care le puteți procesa simultan. 3- Un site web nu ar trebui să aibă dependențe de serverul pe care rulează, dacă este migrat pe un sistem care folosește nginx de exemplu, va înceta să funcționeze conform așteptărilor. ...continuă

4- Există metode mai curate de a prelua erorile https://stackoverflow.com/a/34619308/768516
