dedlfix: Erklärliches Verhalten von RewriteRule

Beitrag lesen

echo $begrüßung;

ich habe bspw. folgende RewriteRule:

(#1): RewriteRule ^([^/\.]*)/$ hl.php?bereich=$1

um über '/grundlagen' auf /hl.php?bereich=grundlagen zuzugreifen.

Das klappt, '/grundlagen' wird in der Adresszeile allerdings automatisch zu '/grundlagen/'.

Das ist ein übliches Verhalten der Webserver. Die Ressource heißt /grundlagen/ mit / am Ende, da es ein Verzeichnis und keine Datei ist. Wenn der Server beim Request nach /foo keine Datei aber ein Verzeichnis foo findet, sendet er einen Redirect auf /foo/ zum Client. Das muss so sein, damit der Client relativ verlinkte Dokumente finden kann. Hieße die Ressource /foo ergäbe ein Link auf bar einen Request nach /bar. Bei /foo/ wird jedoch /foo/bar nachgefragt.

Dein Request nach /grundlagen passt nicht auf die Regel. Es muss aber ein Verzeichnis namens grundlagen geben, sonst ergäbe es einen 404. Der Server schickt den Redirect, woraufhin der Client nach /grundlagen/ fragt und die Regel zutrifft.

Den Rest der Fragen, so hoffe ich, kannst du nun selbst klären. Hilfreiche Werkzeuge sind die livehttpheaders-Extension für den Firefox, um sich den HTTP-Header-Verkehr zwischen Client und Server anzusehen, sowie das RewriteLog des Apachen, bei Unklarheiten des mod_rewrite-Verhaltens. Um Letzeres zu aktivieren braucht man aber administrativen Zugriff auf den Apachen.

echo "$verabschiedung $name";