mod_rewrite
Astoria
- webserver
Hallo,
ich hab schon Stunden im Internet und im Archiv dieses Forums gesucht, ich komm einfach nicht weiter.
Möchte die URI http://www.beispiel.de/dingens/xyz auf die URI http://www.beispiel.de/katalog.php?Title=xyz umleiten lassen. Hier der Inhalt meiner .htaccess-Datei:
RewriteEngine on
Options +FollowSymlinks
RewriteRule ^/dingens/(.+)$ /katalog.php?Title=$1
Funktioniert soweit schon. Allerdings schickt der Webserver respektive das Modul mod_rewrite alle neu geschriebenen URIs nochmal durch die Regeln und vermurxt dann alles. Auch alle Bilder, CSS- und JS-Dateien (die alle relativ referenziert sind) werden dann umgeleitet und sehen danach so aus:
http://www.beispiel.de/katalog.php?Title=css/print.css
Im Logfile findet sich dann sowas wie:
add path info postfix: C:/Internet/wwwroot/beispiel.de/dingens -> C:/Internet/wwwroot/beispiel.de/dingens/css/screen.css
was natürlich zu einem Http-Statuscode 404 führt.
Muss ich jede Datei und jeden Ordner als RewriteCondition pflegen, damit das nicht passiert oder wie geht das sonst?
Danke.
Hi,
RewriteEngine on
Options +FollowSymlinks
RewriteRule ^/dingens/(.+)$ /katalog.php?Title=$1Funktioniert soweit schon. Allerdings schickt der Webserver respektive das Modul mod_rewrite alle neu geschriebenen URIs nochmal durch die Regeln
Das ist ganz normal, wenn man es per .htaccess konfiguriert.
Muss ich jede Datei und jeden Ordner als RewriteCondition pflegen, damit das nicht passiert oder wie geht das sonst?
Das einfachste dürfte sein, eine RewriteCond vorzuschalten, die den REQUEST_FILENAME darauf prüft, ob er eine physisch existierende Datei darstellt.
MfG ChrisB
Hallo,
Das einfachste dürfte sein, eine RewriteCond vorzuschalten, die den REQUEST_FILENAME darauf prüft, ob er eine physisch existierende Datei darstellt.
schon probiert, mit
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
aus dem Thread http://forum.de.selfhtml.org/archiv/2009/1/t182042/#m1204362
hat aber nicht funktioniert, daher habe ich es aus der obigen Problembeschreibung entfernt
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Fürs Protokoll: !-l ist auch nicht verkehrt, zwar nicht unter Windows - aber allgemein.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-dFürs Protokoll: !-l ist auch nicht verkehrt, zwar nicht unter Windows - aber allgemein.
Aber auch nur, wenn du wirklich symbolische Links verwendest. Sonst ist es eine unnötige Dateisystemoperation in Form eines stat().
Im Logfile findet sich dann sowas wie:
add path info postfix: C:/Internet/wwwroot/beispiel.de/dingens -> C:/Internet/wwwroot/beispiel.de/dingens/css/screen.css
Das passiert aber nicht durch deine RewriteRule. Wenn der Client /dingens/css/screen.css anfordert und der Ordner .....beispiel.de/dingens/css/ nicht existiert, kommt genau das bei raus.
Prüfe also einmal deine HTML-Referenzierungen, ob du auch weiterhin auf die korrekte URI referenzierst.
Hint: Du befindest dich jetzt in der Ebene /dingens/, um da wieder rauszukommen müsstest du bei einer relativen Referenzierung ="../css/screen.css" notieren.