Mój .htaccess przekierowuje wszystkie żądania /word_here
do /page.php?name=word_here
. Następnie skrypt PHP sprawdza, czy żądana strona znajduje się w swojej tablicy stron.
Jeśli nie, jak mogę zasymulować błąd 404? Próbowałem to, ale to nie spowodowało w moim 404 skonfigurowanym przez ErrorDocument
w .htaccess
wyświetlane.
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
Czy mam rację myśląc, że przekierowywanie na stronę błędu 404 jest niewłaściwe?
Odpowiedzi:
Aktualną odpowiedzią (od PHP 5.4 lub nowszą) do generowania stron 404 jest użycie
http_response_code
:die()
nie jest absolutnie konieczne, ale zapewnia, że nie będziesz kontynuować normalnego wykonywania.źródło
To, co robisz, zadziała, a przeglądarka otrzyma kod 404. Co to nie będzie zrobić, to wyświetla „not found” stronę, która może pojawić się spodziewa, np:
Nie znaleziono
Żądanego adresu URL /test.php nie znaleziono na tym serwerze.
Dzieje się tak, ponieważ serwer WWW nie wysyła tej strony, gdy PHP zwraca kod 404 (przynajmniej Apache tego nie robi). PHP jest odpowiedzialne za wysyłanie własnego wyjścia. Więc jeśli chcesz mieć podobną stronę, musisz sam wysłać kod HTML, np:
Możesz skonfigurować Apache, aby używał tej samej strony dla swoich własnych komunikatów 404, umieszczając to w httpd.conf:
źródło
Spróbuj tego:
źródło
Utwórz niestandardowe strony błędów za pomocą pliku .htaccess
1. 404 - nie znaleziono strony
2. 500 - Wewnętrzny błąd serwera
3. 403 - Zabronione
4. 400 - Złe żądanie
5. 401 - Wymagana autoryzacja
Możesz także przekierować wszystkie błędy na pojedynczą stronę. lubić
źródło
Czy pamiętałeś, aby umrzeć () po wysłaniu nagłówka? Nagłówek 404 nie zatrzymuje automatycznie przetwarzania, więc może się wydawać, że nic nie zrobił, jeśli ma miejsce dalsze przetwarzanie.
Nie jest dobrze PRZEKIEROWAĆ na swoją stronę 404, ale możesz DOŁĄCZAĆ jej zawartość bez problemu. W ten sposób masz stronę, która poprawnie wysyła stan 404 z poprawnego adresu URL, ale zawiera również Twoje „czego szukasz?” strona dla czytelnika.
źródło
spróbuj umieścić
w
.htaccess
pliku.Zrób to dla dowolnego błędu, ale zamień 404 na swój błąd.
źródło
W Drupal lub Wordpress CMS (i prawdopodobnie innych), jeśli próbujesz sprawić, by jakiś niestandardowy kod php wyglądał na nieistniejący (chyba że spełniony jest jakiś warunek), poniższe działa dobrze, przejmując obsługę 404 CMS:
źródło
Zaraz po tym wierszu spróbuj zamknąć odpowiedź za pomocą
exit
lubdie()
lub
źródło
ErrorDocument
, ale z PHP.ErrorDocument
nie działa po wprowadzeniu kodu PHP. ta odpowiedź najlepiej wyjaśnia zamieszanie, z którym miałem do czynienia 9 lat temu$reqpath = strtok("/".trim(substr($_SERVER["REQUEST_URI"], strlen(APP_ROOT)), "/"), "?");
w swoim pliku page.php. Ponieważ istnieje scenariusz, w którym jedna z tych stron oczekuje od użytkownika zapytania „nazwa”.spróbuj tego raz.
źródło