.htaccess - ErrorDocument vs RewriteRule

7

Ich möchte, dass fehlende Dateien und ungültige Verzeichnisse auf eine benutzerdefinierte 404-Fehlerseite umgeleitet werden. Ich glaube, dass dies mit zwei Methoden erreicht werden kann.

%Vor%

Ist eine Option besser als die andere? Wann möchte ich eins gegen das andere benutzen?

    
csi 03.04.2013, 16:04
quelle

1 Antwort

27

Die Rewrite-Regel gibt den richtigen Statuscode nicht zurück. Das bedeutet, dass ein Browser Ihre benutzerdefinierte Fehlerseite anzeigt, der Antwortcode jedoch immer noch 200 ist und der Browser (oder welcher Client mit dem Server kommuniziert) wird denken, dass die spezifische ungültige Anfrage eigentlich ein guter ist anfordern.

Die ErrorDocument -Anweisung zeigt die benutzerdefinierte Fehlerseite an, gibt aber auch einen 404 Response-Code zurück, so dass der Browser (oder welcher Client) weiß, dass das, was er angefordert hat, nicht auf dem Server gefunden wurde.

Beachten Sie, dass mod_rewrite ein R -Flag hat, auf das Sie einen Antwortcode geben können:

%Vor%

Dies wird einen Antwortcode 404 zurückgeben, aber wird die /not-found.html Seite nicht anzeigen. Es wird das benutzerdefinierte Fehlerdokument anzeigen, wenn Sie die ErrorDocument -Anweisung verwenden:

%Vor%

Die Rewrite-Regel erzwingt eine 404, ihr Ziel wird im Wesentlichen ignoriert, dann stellt die ErrorDocument sicher, dass die benutzerdefinierte Fehlerseite sowie die richtige 404 -Antwort angezeigt wird.

Also willst du ErrorDocument , so ziemlich immer. Die andere Sache, die zu beachten ist, ist, dass sich mod_rewrite an einer anderen Stelle in der URI zu File mapping pipeline als ErrorDocument befindet. Wenn Sie sich auf mod_rewrite verlassen, um zu bestimmen, was 404 sein soll und was nicht, wird es wahrscheinlich von anderen Modulen beeinflusst, die möglicherweise darauf folgen (wie zum Beispiel mod_proxy).

Um klar zu sein, wird das ErrorDocument verwendet nachdem die URL-zu-Datei-Mapping-Pipeline mit einer "Ressource nicht gefunden" (dh einem 404 ) abgeschlossen ist, dann liefert die benutzerdefinierte Fehlerdokumentanweisung ErrorDoucment 404 eine benutzerdefinierte Fehlerseite anstelle der Standardfehlerseite. Wenn Sie mod_rewrite wie in Ihrer Frage verwenden, wird die natürliche Art und Weise, in der die Pipeline bei 404 ankommt, vollständig umgangen.

    
Jon Lin 03.04.2013, 19:41
quelle