Sven Rautenberg: htaccess

Beitrag lesen

Moin!

Du bist dem Irrtum aufgesessen, dass es hier um "Datei-Wildcards" geht. Die Suchmuster sind reguläre Ausdrücke. Es gilt also kein "*.*" als Ausdruck für "alle Dateien", weil die RewriteRule gar nicht auf Dateibasis arbeitet, sondern auf URL-Basis - und außerdem haben Sterne und Punkte in der Welt der regulären Ausdrücke andere Bedeutungen!

dann wäre sowas in der form

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^/*.* error404.html [R,L]

besser? Oder wie würde man Deiner Meinung nach dateien jeglicher art, die nicht existieren mit htaccess umleiten?

Wenn du einen Mechanismus haben willst, der prüft, ob eine angeforderte Ressource existiert und ausgeliefert werden kann, und andernfalls eine selbstgestaltete 404-Seite (mit Status 404) liefert, dann benutze folgendes:

ErrorDocument 404 /error404.html

Benutze KEIN Rewrite.

Was deinen regulären Ausdruck für "alles" angeht:

RewriteRule .* (usw.)

Das ist vollkommen ausreichend für "alles". Der Punkt steht für "beliebiges Zeichen", der Stern für "null bis unendlich Stück". Kein "^", kein "/", kein "*.*".

Was das Redirect angeht: Solange du am Ende der RewriteRule das [R]-Flag stehen hast, wird der Server einen Redirect auf die Seite senden, und nicht intern einfach den Inhalt austauschen.

Aber auch ohne Flag [R] würde der Server keinen Fehlerstatus 404 senden, sondern (deswegen macht man normalerweise Rewriting) Status 200, weil erfolgreich eine Seite geliefert werden konnte.

Für das Setzen des HTTP-Status gibts ein eigenes Flag - findest du in der Doku.

Allerdings ist es vollkommen unnötig, sich in diesem Fall damit zu beschäftigen, da das oben angegebene ErrorDocument alles das, was die RewriteRule tun soll, viel besser und performanter erledigt.

- Sven Rautenberg

--
"Love your nation - respect the others."