dedlfix: htacces Rewrite Engine

Beitrag lesen

Tach!

Alle anfragen auf solche Seiten sollen über die index.php laufen und als GET Parameter die Seite mitbekommen.
"http://localhost/admin/user_aendern/" -> "http://localhost/index.php?page=admin/user_aendern/"

Dazu muss man nicht großartig Querystrings übergeben, die $_SERVER['REQUEST_URI'] steht auch so bereit.

RewriteRule .* index.php

Und davor noch die beiden RewriteCond zum Ausschließen von existierenden Dateien und Verzeichnissen setzen.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Nun zum Problem. Wenn ich in der htaccess das festlege was ich will funktioniert alles nur solange ich genau
"http://localhost/admin/user_aendern/"
aufrufe. Wenn man
"http://localhost/admin/user_aendern"
(Kein Slash am Ende) aufruft wird die Seite zwar auch korrekt angezeigt, jedoch ändert sich die Adresszeile im Browser zu
"http://localhost/admin/user_aendern/?page=admin/user_aendern"

Nun, der Apache stellt fest, dass admin/user_aendern ein Verzeichnis ist und sagt dem Client, dass er nochmal kommen soll, aber mit / hintendran, damit relative Links in den Dokumenten ordentlich aufgelöst werden können. Hier kommt wohl auch noch das Rewrite ins Spiel, aber was da wie abläuft müsstest du mal im RewriteLog nachschauen, wenn dir das zugänglich ist. Man braucht da Admin-Rechte zum konfigurieren.

RewriteRule ^(.*)$    index.php?page=$1&%1

Reguläre Ausdrücke sind immer gierig. Ein * versucht so viele Zeichen wie möglich zu finden. Mit .* wird alles gefunden, von vorn bis hinten. Da extra noch ^ und $ anzugeben ist unnötig.

dedlfix.