if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Dlaczego to nie zadziała? Otrzymuję pustą stronę.
php
header
http-status-code-404
danorton
źródło
źródło
Odpowiedzi:
Twój kod jest poprawny technicznie. Jeśli spojrzysz na nagłówki tej pustej strony, zobaczysz nagłówek 404, a inne komputery / programy będą w stanie poprawnie zidentyfikować odpowiedź jako nie znaleziono pliku.
Oczywiście Twoi użytkownicy nadal są SOL. Normalnie 404 są obsługiwane przez serwer WWW.
Problem polega na tym, że gdy serwer WWW zacznie przetwarzać stronę PHP, minął już punkt, w którym mógłby obsłużyć 404
Oprócz dostarczania nagłówka 404, PHP jest teraz odpowiedzialny za wyświetlenie rzeczywistej strony 404.
źródło
Jeśli spojrzysz na ostatnie dwie linie echa, zobaczysz tam zawartość. Możesz go dostosować, jak chcesz.
źródło
To jest poprawne zachowanie , to do Ciebie należy tworzenie treści dla strony 404.
Nagłówek 404 jest używany przez roboty i menedżery pobierania do określenia, czy plik istnieje.
(Strona z nagłówkiem 404 nie będzie indeksowana przez Google ani inne wyszukiwarki)
Jednak zwykli użytkownicy nie patrzą na nagłówki http i używają strony jako normalnej strony.
źródło
Dla przypomnienia, oto obsługa wszystkich spraw:
źródło
die()
wymagane?Załaduj domyślną stronę 404 serwera, jeśli taką masz, np. Zdefiniowaną dla Apache:
źródło
Od php 5.4 możesz teraz to zrobić
http_response_code(404);
źródło
Kolejne rozwiązanie oparte na @ Kitet's.
Jeśli programujesz witrynę internetową hostowaną na serwerze, nad którym nie masz kontroli, nie będziesz wiedzieć, który plik to „404missing.html”. Jednak nadal możesz to zrobić.
W ten sposób zapewniłeś dokładnie taki sam wynik jak normalna strona 404 na tym samym serwerze. Obserwator nie będzie w stanie odróżnić istniejącej strony PHP zwracającej 404 od nieistniejącej strony.
źródło
Spróbuj z:
PA!
źródło
Nieco krótsza wersja. Tłumić dziwne echo.
źródło
nigdy nie upraszczaj instrukcji echo i nigdy nie zapominaj średnika jak powyżej, także po co uruchamiać substrat na stronie, możemy łatwo uruchomić php_self
źródło
Jeśli chcesz, aby była wyświetlana domyślna strona błędu serwera, musisz to zrobić na serwerze.
źródło
Robisz to dobrze, chociaż przydałoby się trochę rafinacji. Wygląda na to, że zostało to rozwiązane, więc porozmawiajmy o praktycznych zaletach aplikacji:
Nasza stara strona internetowa, która ma dużą kolekcję wielojęzycznej dokumentacji technicznej, wykonywała to wewnątrz warunku, jeśli inaczej:
Problem (poza nieprzydatną wiadomością i złym doświadczeniem użytkownika) polega na tym, że zazwyczaj używamy robota indeksującego linki (w naszym przypadku integralności) do sprawdzania złych linków i brakujących dokumentów. Oznacza to, że otrzymywaliśmy idealnie poprawną odpowiedź 200 bez błędu, informującą nas, że jest tam plik. Integralność nie wiedziała, że spodziewamy się pliku PDF, więc musieliśmy ręcznie dodać nagłówek 404 za pomocą php. Dodając swój kod nad kostką (ponieważ nic później nie zostanie wykonane, a nagłówek i tak powinien zawsze znajdować się przed renderowanym kodem HTML), integralność (która zachowuje się mniej więcej jak przeglądarka) zwróciłaby 404 i wiedzielibyśmy dokładnie, gdzie szukać brakujących pliki. Są bardziej eleganckie sposoby poinformowania użytkownika o błędzie,
źródło
Spróbuj tego:
źródło
Wiesz, na mojej stronie stworzyłem coś takiego:
Mam nadzieję, że Ci to pomoże.
źródło
Wpadłem na ten problem .. Myślę, że przekierowanie do nieistniejącego linku na twoim serwerze może załatwić sprawę! Ponieważ serwer zwróciłby jego 404:
header('Redirect abbb.404.nonexist');
<to na pewno nie istniejeźródło
Jeśli chcesz wyświetlić domyślną stronę 404 serwera, możesz załadować ją w ramce takiej jak ta:
źródło