Jak utworzyć niestandardowe strony błędów 401, 403 i 500?

27

Po napotkaniu błędu 404 plik szablonu 404.php może zostać użyty do wyświetlenia niestandardowego komunikatu o błędzie. Jest to udokumentowane w artykule Hierarchia szablonów .

Moim celem jest stworzenie niestandardowych stron błędów dla błędów 401, 403 i 500. Próbowałem utworzyć pliki 401.php, 403.php i 500.php w katalogu mojego motywu, ale to nie działa.

Jak mogę utworzyć niestandardowe strony błędów 401, 403 i 500 w WordPress?

henrywright
źródło
2
Możesz spróbować użyć tego kodu jako punktu wyjścia: jesin.tk/wordpress-custom-403-401-error-page
Joe
Oto istniejąca wtyczka, która pozwala dostosować strony błędów, takie jak błędy 403 i 401: http://wordpress.org/plugins/custom-error-pages/ Wszystko, co musisz zrobić, to zainstalować i aktywować. Musisz jednak ręcznie edytować plik .htaccess (lub nginx.conf) określony na stronie opcji wtyczek.
Pi Lover

Odpowiedzi:

15

Strony błędów są obsługiwane przez .HTACCESS, jeśli używasz Apache, skorzystasz z ErrorDocumentdyrektywy i dodasz do niej status oraz adres URL.

Wygląda to tak w twoim pliku .htaccess:

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

Możesz użyć poniższej funkcji poniżej. Spowoduje to dynamiczne dodanie potrzebnych plików HTACCESS lub możesz to zrobić ręcznie.

1. Dodaj strony:

Następnie należy przejść do pulpitu nawigacyjnego i utworzyć strony jak każdą normalną stronę („Pulpit nawigacyjny”> „Strony”> „Nowy”). Można je zatytułować, co tylko chcesz, po prostu upewnij się, że ślimak jest taki sam jak w poniższej funkcji (Slug: error-401, error-403, error-404, error-500). Możesz także użyć szablonu strony, aby utworzyć układ i styl dla tych konkretnych stron. W tym celu postępuj zgodnie z instrukcjami Kodeksu WordPress .

2. Dodaj funkcję:

// 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 !! UWAGI NA TEMAT POWYŻSZEJ FUNKCJI

Podczas przenoszenia witryny lub zmiany struktury adresu URL

Należy pamiętać o powyższej funkcji, chociaż sprawdzi ona, czy dyrektywy ErrorDocument już istnieją przed zapisaniem ich w pliku HTACCESS, ale nie zmieni przepisów dyrektyw ErrorDocument, jeśli zmienisz lub przeniesiesz bloga, aby odzwierciedlał zaktualizowane lokalizacje stron. Najpierw musisz usunąć istniejące dyrektywy ErrorDocument w pliku HTACCESS, a następnie ponownie uruchomić tę funkcję, aby utworzyć nowe dyrektywy.

Prawidłowy hak, aby uruchomić funkcję TYLKO RAZ

Inną rzeczą, na którą należy zwrócić uwagę, jest ta funkcja - użycie initakcji będzie się uruchamiało za każdym razem, gdy strony się ładują, co jest bardzo niepotrzebne i marnotrawcze, dlatego sugerowałbym dodanie jej do wtyczki i użycie register_activation_hookraczej tak, aby uruchamiała się tylko raz po aktywacji wtyczki

Uprawnienia do plików

Konieczne jest również, aby Twój .htaccess był zapisywalny podczas korzystania z powyższej funkcji, więc upewnij się, że ma on odpowiednie uprawnienia do plików, na przykład CHMOD777.

Matt Royal
źródło
Nie jestem pewien, jak to ma działać, czy edytujesz ręcznie plik .htaccess, ale to nie działa. Próbuję to zrobić na localhost i powinno to być możliwe na localhost, ponieważ mam dostęp do wszystkiego, serwera i klienta. Ale dlaczego to nie działa?
Solomon Closson
@ SolomonClosson, być może możesz spróbować użyć wtyczki, którą do tego napisałem, zrobi to za Ciebie i podąży dokładnie za powyższym kodem :). Oficjalna wtyczka WordPress.Org
Matt Royal
@MattRoyal Funkcja działa świetnie i używam jej do tworzenia innych reguł htaccess. Jak mogę wstawić reguły na samą górę pliku, powyżej domyślnych reguł wp htaccess? W tej chwili reguły są dodawane na dole pliku htaccess. Dziękuję Ci.
lowtechsun
Nie zgadzam się z rozwiązaniem: 1- NIE POWINIENEŚ 777 niczego na serwerze internetowym! To po prostu zła praktyka i prowadzi do poważnych luk bezpieczeństwa. 2- Dodajesz zapis pliku do każdego żądania na stronie internetowej, ponieważ działanie zapisu spowoduje zablokowanie pliku, umożliwiając tylko jeden zapis w tym samym czasie, zmniejszając liczbę żądań i odpowiedzi jednocześnie. 3- Strona internetowa nie powinna mieć zależności od serwera, na którym działa, jeśli zostanie migrowana do systemu, na przykład na którym używany jest nginx, przestanie działać zgodnie z oczekiwaniami. ... kontynuuje
Eduardo Oliveira,
4- Są bardziej przejrzyste sposoby chwytania błędów stackoverflow.com/a/34619308/768516
Eduardo Oliveira,