ErrorDocument 404 für php Dateien
Veröffentlicht am 23.12.2006 | Kommentar schreiben | Tags: php, htaccess
Bei manchen Servern tritt das Phänomen auf, dass der Apache Befehl ErrorDocument 404 mit php Dateien nicht funktioniert und dann die globale Fehlerseite, welche in der http.conf definiert ist, aufgerufen wird.
Man kann sich dabei jedoch eines kleinen Tricks bedienen. Man definiert ganz normal das ErrorDocument für html Seiten, in diesem Beispiel die Seite 404.html. D.h. für alle html Dateien greift diese Regel ganz hervorragend.
Für alle php Dateien wird diese Regel jedoch ignoriert und der Server findet in der .htaccess Datei keine Regel die für ihn auf dieses Event passt, somit verwendet der Server seine eigene Fehlerdatei.
Mit dem Befehl RewriteCond %{REQUEST_FILENAME} !-f wird überprüft, ob die
angeforderte Datei nicht existiert, trifft dieser Fall zu, wird auf die Seite Error_404 weitergeleitet. Diese Seite hat keine Endung. Für diese Art von Dateien greif jedoch die Regel ErrorDocument 404 /404.html. Somit existiert auch für php Dateien eine schöne 404 Feherseite.
Der komplette Code sieht wie folgt aus:
RewriteEngine On ErrorDocument 404 /404.html RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.+.php /Error_404 [L]
Hinweis: Diese Regel sollte als letzte Regel in der .htaccess angeführt werden damit Sie keinen anderen Regeln zuvor kommt.
- Weiterführende Links
- httpd.apache.org/docs/1.3/mod/mod_rewrite.html
Wunderbar! Ich hatte erhebliche Probleme, eine 404-Datei auf meinem Server zu installieren. Das war der Knackpunkt.
Ergänzend möchte ich hinzufügen, dass diese Regel ALS LETZTE Regel der Rewrite-Sektion angewandt werden sollte. Ansonsten ist ab sofort jeder umgeschriebene URL eine Fehlerseite!
Ich denke mal, den meisten ist das klar - mir war es das nicht.
Nochmal danke für den Hinweis!
Super! Bei mir musste noch der Zusatz RewriteEngine On mit rein
Gesamtcode:
ErrorDocument 404 /404.html
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.+.php /404.html [L]
Danke für den Hinweis.
Passt supi, danke!!!
Super! War schon am verzweifeln, schließlich gehört zu einer guten Community auch eine passende Fehlerseite :)
Mir ist nicht ganz klar, warum man dann noch überhaupt die Angabe
ErrorDocument 404 /404.html
braucht, man könnte doch einfach ALLE fehlenden Dateien (f) und Ordner (d) mit der RewriteRule auf das Error Document umleiten, so:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /404.html [L]
Die eingesparte Zeile ist vielleicht nicht so wichtig, wesentlich ist, dass man in seiner .htaccess, die ja auch mal sehr umfangreich werden kann, nicht eine Regel (umleiten auf eine Seite bei 404) auf zwei Stellen verteilt hat. Die Gefahr ist dann nämlich, dass (bei Webseiten für Auftraggeber) ein anderer Bearbeiter nicht weiß oder man selbst in drei Jahren vergessen hat, dass nach dem "ErrorDocument 404 /404.html" am Anfang weiter unten noch eine andere Direktive kommt, die man mit ändern muss, wenn man z.B. das Error Document umbennent oder woander hin umleiten will (ich leite Fehler z.B. auf die Homepage um, nicht auf ein Fehlerdokument).
genau was ich gesucht habe!
thx
Im Prinzip wird mit RewriteCond das gleiche angezeigt; der Browser bekommt aber den Status 200 OK zurück statt eines Fehler-Codes.
@Titus
Die Regel leitet auf die Datei Error_404 weiter, welches keine PHP Datei ist. Hier greift nun wieder die ErrorDocument Regel. Die Weiterleitung findet serverintern statt wovon der Benutzer oder die Suchmaschine nichts mitbekommt.
Es ist eben ein Workaround.
Hat perfekt geholfen, vielen Dank!!