
In meinem .htaccess
habe ich
ErrorDocument 404 http://foo.com/404.html
Es funktioniert in dem Sinne, dass ich jeden „Datei nicht gefunden“-Fehler behebe und stattdessen die 404-Seite anzeige. Allerdings funktioniert es so, dass die fehlerhafte URI mit einer 301-Weiterleitung auf meine 404.html
Seite umgeleitet wird.
Das ist schlecht, weil Suchmaschinen und Crawler dann keinen 404-Code, sondern einen 301-Code sehen und gelöschte Seiten nicht aus ihren Indizes entfernen.
Kann ich Apache dazu bringen, den Inhalt dieser 404-Seite bei „Datei nicht gefunden“-Fehlern bereitzustellen und dennoch einen 404-Code statt des 301-Codes zurückzugeben?
Antwort1
Sie sollten versuchen, einen absoluten oder relativen Pfad und keine URL zu verwenden
Meine apache2.conf:
ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html
Antwort2
Verweisen Sie nicht auf eine externe URL
Die Syntax lautet:
ErrorDocument <3-digit-code> <action>
wo die Aktion stattfinden kann,
- Anzuzeigender Text. Setzen Sie Anführungszeichen (") um den Text.
- Eine externe URL, zu der weitergeleitet werden soll.
- Eine lokale URL, zu der weitergeleitet werden soll.
Das Verweisen auf eine externe URL führt zu einer tatsächlichen Weiterleitung, während die Verwendung einer lokalen URL intern ist.
Um den Inhalt einer Datei darzustellen, zeigen Sie einfach darauf, z. B.:
ErrorDocument 404 /404.html
Verwenden Sie den richtigen Statuscode für den Job
Das ist schlecht, denn Suchmaschinen und Crawler sehen dann keinen 404-Code, sondern einen 301-Code undlöscht gelöschte Seiten nicht aus ihren Indizes.
Wenn die Seitegebrauchtzu existieren und jetzt nicht mehr, lautet der richtige Antwortcode410 Weg. 410 ist der Code, der sagt „Hey, das existiert nicht“, während ein 404-Code nur nach wiederholten Versuchen, auf die nun nicht mehr existierende Seite zuzugreifen, als solche verstanden wird.
Antwort3
Kommentar zu den Antworten von Maxence und AD7six (mein Ruf bei Serverfaul ist nicht hoch genug und der Ruf bei Stack Exchange zählt anscheinend nicht):
Ich habe das Problem gerade auf diese Weise gelöst, allerdings fehlten dann die eingebundenen Bilder und Styles, da die URL immer noch die URL ist, die der Benutzer aufrufen wollte.
Die Lösung besteht darin, im Kopf des 404-Dokuments ein Basis-Tag hinzuzufügen, wie
ErrorDocument 404
oder absolute URLs mit oder ohne Protokoll/Domänennamen zu verwenden.