Cum să creezi pagini personalizate pentru erorile 401, 403 și 500?

1 mai 2014, 14:44:47
Vizualizări: 38.6K
Voturi: 30

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?

2
Comentarii

Puteți încerca să folosiți acest cod ca punct de plecare: http://jesin.tk/wordpress-custom-403-401-error-page/

Joe Joe
1 mai 2014 14:48:21

Există deja un plugin care vă permite să personalizați paginile de eroare precum erorile 403 și 401: http://wordpress.org/plugins/custom-error-pages/ Tot ce trebuie să faceți este să îl instalați și activați. Cu toate acestea, trebuie să editați manual fișierul .htaccess (sau nginx.conf) specificat în pagina de opțiuni a pluginului.

Pi Lover Pi Lover
1 mai 2014 16:56:14
Toate răspunsurile la întrebare 1
5
17

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.

20 iun. 2014 21:12:03
Comentarii

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ă?

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

@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

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

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

lowtechsun lowtechsun
12 feb. 2018 17:27:20

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ă

Eduardo Oliveira Eduardo Oliveira
10 sept. 2019 12:41:48

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

Eduardo Oliveira Eduardo Oliveira
10 sept. 2019 12:45:32