Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [html] strona bledu 404
Forum PHP.pl > Forum > Przedszkole
lukash82
Witam,

Mam takie przedszkolne pytanie...

Jeśli dana podstrona nie istnieje to przeglądarka standardowo wywala brzydką stronę 404. Wyłapuję wtedy takie przypadki i przekierowuję internautę na specjalnie przygotowaną stronę błędu 404.html. Z tym że wtedy kod odpowiedzi http = 200, bo teoretycznie wszystko jest ok. Czy takie rozwiązanie jest poprawne?

Przekierowanie robię za pomocą
  1. header("Location: 404.html");


Pozdrawiam, Ł.
trueblue
Nie jest. Przed przekierowaniem musisz wyrzucić status 404.
  1. header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
Pyton_000
header("Location: 404.html", true, 404);
KR2615
Najprościej zrobić to przez .htaccess. Masz wtedy kkod 404 i customizowalną stronę błędu
Kod
ErrorDocument 404 /404.html
lukash82
Witam,

Muszę odgrzać kotleta...

Próbuję już na milion sposobów i dalej nie mogę sobie z tym 404 poradzić. Mam taką konstrukcję (w mega uproszczeniu bez zapytań, etc.):

  1. $result = mysql_query(SELECT...) or die(mysql_error());
  2. $row = mysql_fetch_array($result);
  3.  
  4. // jeśli istnieje
  5. if($row) // to wykonaj
  6.  
  7. //jeśli nie istnieje
  8. else // > 404


No i teraz jeśli podstrona nie istnieje to wykonuję tak jak napisał @Pyton_000 czyli: header("Location: 404.html",TRUE,404);

Efekt jest taki, że np. mamy adres domena.pl/kontakt, zmieniając to na domena.pl/kontakttttt otrzymuję w firebugu status 404, ale przekierowanie nie następuje. Strona zostaje na adresie domena.pl/kontakttttt. A że takiej strony fizycznie nie ma to mam pustą białą stronę...

Pytanie, jak zmusić to ustrojstwo do przekierowania na stronę 404.html. No bo tak to chyba powinno wyglądać. Jednak nawet jeśli się już uda to zrobić to tak na chłopski rozum, 404.html istnieje więc znów wtedy dostanę status 200. Już nie ogarniam tego...:/

Próbowałem też najprostszej metody podanej w milionie miejsc w necie, czyli w htaccess "error document 404", ale przy takiej powyższej konstrukcji if - else to nie działa.

Jeśli ktoś może mi pomóc to ogarnąć to będę dźwięczny.
Pyton_000
To że ten plik istnieje to nie oznacza że dostaniesz 200, właśnie po to są te dodatkowe parametry.

plik 404.html musi być w odpowiedniej ścieżce.

lukash82
Tak, tylko ten przypadek jest taki trochę specyficzny. Ale już sobie z tym poradziłem. Rozwiązanie poniżej, może się komuś przyda:

  1. header("HTTP/1.1 404 Not Found");
  2. include_once('404.php'); // czy co kto tam woli...


I wtedy nie ma przekierowania na podstronę domena.pl/404 tylko zostawiamy usera na stronie, gdzie coś sobie źle wpisał w adresie i może to poprawić. W treści strony ładujemy info o błędzie 404 z instrukcjami dla usera, a dla googlebotów mamy ładny status 404. W każdym bądź razie dzięki za zaangażowanie w rozwiązanie problemu. Pozdrawiam, Ł.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.