Eigene Fehlerseite 404 und trailing slash redirect

qhil

Captain
Registriert
Apr. 2011
Beiträge
3.119
Moin moin,

ich habe auf meiner Seite eine individuelle Fehlerseite für den Error 404 erstellt. Das gehört ja zum guten Ton :) Der Verweis darauf ist in der .htaccess festgehalten. Ebenfalls habe ich dort eine Regel stehen, die an die eingegebene URL einen Trailing Slash hängt. Das Ganze sieht so aus:

Code:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L,R=301]

ErrorDocument 404 /404.php
ErrorDocument 401 /401.php

Funktioniert auch alles bestens. Ab und zu mache ich mal einen vollständigen Test auf www.seitenreport.de. Dort wird unter anderem auch geprüft, ob eine eigene Fehlerseite vorhanden ist. Leider erreiche ich dort nur 50% von 100% mit der Begründung "Redirect". Wenn ich die Regel für den abschließenden Slash rausnehme, bekomme ich auch die 100%. Verständlicherweise will ich die Regel aber behalten.

Mit diversen HTTP Header Check Tool bekomme ich folgende Ergebnisse:
Nicht vorhandene Seite ohne trailing Slash:

Code:
http://www.meinedomain.de/123 - 301 Moved Permanently
http://ww.meinedomain.de/123/ - 404 Not Found

Nicht vorhandene Seite mit trailing Slash:
Code:
http://www.meinedomain.de/123/ - 404 Not Found

Nun zur abschließenden Frage :) Wie kann man es realisieren, dass der 404 auch ausgegeben wird, selbst wenn kein trailing Slash am Ende steht? Interessant finde ich, dass bspw. hier auf CB bei einer Fehlerseite kein Slash angehängt wird - sonst schon.

Danke im Voraus,
qhil
Ergänzung ()

Hat wirklich niemand einen Ansatz dafür?
Im Prinzip will ich ja "nur", dass kein Slash angehangen wird, wenn die Seite nicht existiert, damit wirklich nur der 404 und nicht auch noch der 301 ausgegeben wird.
 
Hmm, ich hab zwar nicht so viel Ahnung von Rewrites, aber warum hast du ein ! vor deinem -f?
Damit leitest du ja bewusst jede nicht existierende Seite ohne / um.
Wenn du umleiten willst, kannst du ja mit -d prüfen und sonst wird's das Verzeichnis nicht geben.
Code:
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L,R=301]
 
ErrorDocument 404 /404.php
ErrorDocument 401 /401.php
 
Der Header wird jetzt zwar richtig ausgeben, egal ob ich eine nicht vorhandene Seite mit oder ohne Slash aufrufe, allerdings hängt der an eine existierende Seite kein Slash mehr ran und sagt, dass es sie nicht gibt.

Beispiel:
www.meinedomain.de/impressum/ gibt es.
Wenn ich www.meinedomain.de/impressum aufrufe, soll er einen Slash anhängen und die Seite aufrufen. Das tut er nicht und zeigt daher auch Fehler 404 an.
 
Zuletzt bearbeitet:
Ich galube, das hast Du keinen Einfluss drauf.

Hier bei CB ist es ja auch nicht anders.

Entscheidend bei dem Slash ist wohl, gibt es einen Ordner mit dem Namen 123 wirklich. Gibt es ihn, kommt eben ein / ans Ende dran. Gibt es ihn nicht, dann bleibt die 123 ohne Slash stehen.

Es ist ja kein 404, wenn meinedomain.de/123 wirklich existiert.
 
Zuletzt bearbeitet:
Es ist richtig, was du sagst. Wenn /123 nicht existiert, dann wird 404 zrückgegeben und kein Slash angefügt. Bei mir wird halt immer ein / angefügt, wodurch im Header dann 301 zurückgegeben wird - unabhängig ob es die Seite gibt oder nicht. Genau das will ich verhindern :) Bei CB geht es ja auch.
 
Zurück
Oben