2009-05-01 3 views
3

In meinen PHP-Skripten leite ich den Benutzer auf eine benutzerdefinierte 404 nicht gefundene Fehlerseite um, wenn er versucht, auf Inhalte zuzugreifen, die nicht existieren oder nicht zu diesem Benutzer gehören. Wie so:Wann soll der HTTP-Statuscode gesendet werden?

Ich realisiere, dass der oben genannte head() -Aufruf einen 302 redirect Statuscode als Voreinstellung sendet.

Was ich nicht verstehe, ist jedoch, wenn ich den 404 nicht gefundenen Statuscode senden sollte. Bevor ich den Benutzer umadressiere? Oder wenn ich die /error/notfound/ Seite anzeigen?

Danke für Ihre Hilfe!

Antwort

12

Sie sollten dies so etwas wie tun:

header("HTTP/1.0 404 Not Found"); 
include 'error.php'; 
die(); 
+2

Was passiert, wenn der Browser HTTP/1.1 für die Verbindung verwendet? Ist PHP Apache mit mod_php zwingen, eine HTTP/1.1 Antwort zurückzusenden ??? – Christian

1

Sie können 404 und Location nicht zusammen verwenden. Der Standort ist nur für einige Antworten gültig (201 und 3xx)

Sie können jedoch eine benutzerdefinierte HTML-Seite als Text Ihrer 404-Antwort senden.

9

Sie führen 404-Fehler als Umleitung überhaupt nicht aus.

Was Sie wirklich tun möchten, senden Sie die 404-Status-Header und ersetzen Sie dann die aktuelle Ausgabe durch den Rumpf einer 404-Seite.

Es gibt verschiedene Möglichkeiten, dies zu tun, und es hängt ziemlich viel davon ab, wie Ihre Website strukturiert ist. MVC-Anwendungen geben dies normalerweise mit einer Weiterleitung ab. Ich habe andere Systeme gesehen, die eine Exception auslösen, und dann sorgt der registrierte Exception-Handler dafür, dass die 404-Seite angezeigt wird.

Auf jeden Fall sind die groben Schritten

  1. Bestimmen Inhalt ungültig
  2. Pause aus der laufenden Ausführung sein
  3. Klar jeder Ausgabe, sollte es welche gibt.
  4. Senden Sie den 404 Status-Header
  5. senden, den Inhalt der Seite 404
+0

+1 erklärt schön. Vor allem um zu erwähnen, dass 404-Fehler nicht als Redirect ausgeführt werden, denke ich, dass das der wichtige Punkt ist. –

0

Sie sollten einen 404 HTTP-Statuscode. Browser und crawlers verstehen dies. Sie können auch eine freundlichere Fehlerseite einbetten, die erklärt, was passiert ist, einschließlich eines Formulars zum Durchsuchen Ihrer Website, Soundex-Links usw.

0

Ein "Redirect" und ein "nicht gefunden" sind unterschiedliche Konzepte.

Welche Datei konnte gefunden werden?
http://www.mydomain.com/error/notfound/
oder
http://www.mydomain.com/not_exist.html

Die "http://www.mydomain.com/not_exist.html" Seite sollte ein 404-Header und die "Seite nicht gefunden" Inhalte.

header("HTTP/1.0 404 Not Found"); 
readfile('http://www.mydomain.com/error/notfound/'); 
exit; 

Aber dies erfordert zwei Apache-Anfragen und Art böse ist:

könnte ein quickfix sein.

1

Von php.net:

Es gibt zwei Spezialfälle von Header Anrufe. Der erste ist ein Header, der mit der Zeichenfolge "HTTP /" beginnt (der Fall ist nicht signifikant), der verwendet wird, um den zu sendenden HTTP-Statuscode herauszufinden. Wenn Sie beispielsweise Apache so konfiguriert haben, dass ein PHP-Skript verwendet wird, um Anfragen nach fehlenden Dateien zu bearbeiten (mithilfe der ErrorDocument-Direktive), sollten Sie sicherstellen, dass Ihr Skript den richtigen Statuscode generiert.

<?php 
header("HTTP/1.0 404 Not Found"); 
?> 

http://us.php.net/manual/en/function.header.php