Problem mit mod_rewrite
Sven
- webserver
Hallo ihr,
ich habe ein kleines Problem mit dem mod_rewrite Modul:
RewriteRule index.html$ index.php?id=11
RewriteRule test/index.html$ index.php?id=21
Diese einfache Regel funktioniert nicht: Er schickt mich immer zu index.php?id=11, sobald die Datei index.html heißt.
Ich hab die Regel mal abgeändert, man achte auf die 2. Zeile:
RewriteRule index.html$ index.php?id=11
RewriteRule test/test.html$ index.php?id=21
Hier funktioniert es einwandfrei. Also sobald die Datei /index.html heißt, schickt er mich zu der index.html, die ich in der ersten Regel definiert habe.
Was ist an der Regel falsch? Ich hab auch mal die $-Zeichen entfernt, aber das brachte ebenfalls keinen Erfolg.
Grüße
Sven
Was ist an der Regel falsch? Ich hab auch mal die $-Zeichen entfernt, aber das brachte ebenfalls keinen Erfolg.
ich bin jetzt nich sicher, aber solltest du nicht zumindest den punkt escapen?
Hi,
RewriteRule index.html$ index.php?id=11
RewriteRule test/index.html$ index.php?id=21Diese einfache Regel funktioniert nicht: Er schickt mich immer zu index.php?id=11, sobald die Datei index.html heißt.
Natuerlich, darauf matcht deine erste Rule ja auch bereits.
Ich hab die Regel mal abgeändert, man achte auf die 2. Zeile:
RewriteRule index.html$ index.php?id=11
RewriteRule test/test.html$ index.php?id=21Hier funktioniert es einwandfrei. Also sobald die Datei /index.html heißt, schickt er mich zu der index.html, die ich in der ersten Regel definiert habe.
Und damit weicht das Verhalten wie vom ersten Fall ab ...?
Ich hab auch mal die $-Zeichen entfernt, aber das brachte ebenfalls keinen Erfolg.
Du willst wohl eher noch ein ^ hinzufuegen, wenn die Regel ausschliesslich fuer index.html im Web Root gelten soll.
Und, wie suit schon anmerkte, dass RegEx-Sonderzeichen . escapen.
MfG ChrisB
Hallo,
Und, wie suit schon anmerkte, dass RegEx-Sonderzeichen . escapen.
Den Punkt bei "index.html"?
Die Syntax hatte ich hier gefunden:
http://www.modrewrite.de/13.10.0.0.1.0.phtml
Da war er nicht maskiert... mag aber sein, dass die sich irren. Funktionieren tut es jetzt, sollte ich ihn trotzdem maskieren?
Ich hätte dann noch eine andere Frage:
RewriteRule ^(.*).htm$ $1.html
Diese Regel funktioniert soweit. Allerdings möchte ich nicht, dass in der URL .htm steht, sondern direkt weitergeleitet wird. Ich habe also die Regel ergänzt:
RewriteRule ^(.*).htm$ $1.html [R=302]
Dann schlägt die Weiterleitung allerdings fehl und ich werde auf diese URL geleitet:
http://www.irgendwas.de/C:/.../htdocs/index.html
Er hängt also an die URL den absoluten Pfad dran... die Datei existiert dann natürlich nicht und ich erhalte einen 403-Error.
Das passiert bei allen Regeln, die per [R=302] umgeleitet werden sollen. Kann mir jemand verraten, was da falsch läuft?
Grüße
Sven
Hi,
Und, wie suit schon anmerkte, dass RegEx-Sonderzeichen . escapen.
Den Punkt bei "index.html"?
Ja.
Die Syntax hatte ich hier gefunden:
http://www.modrewrite.de/13.10.0.0.1.0.phtmlDa war er nicht maskiert... mag aber sein, dass die sich irren. Funktionieren tut es jetzt, sollte ich ihn trotzdem maskieren?
Ja, weil deine Regel sonst ggf. auf mehr zutrifft, also du moechtest - der Punkt steht in Regulaeren Ausdruecken fuer ein beliebiges Zeichen.
RewriteRule ^(.*).htm$ $1.html [R=302]
Dann schlägt die Weiterleitung allerdings fehl und ich werde auf diese URL geleitet:
http://www.irgendwas.de/C:/.../htdocs/index.html
Und das ... ist was genau?
Er hängt also an die URL den absoluten Pfad dran... die Datei existiert dann natürlich nicht und ich erhalte einen 403-Error.
Das passiert bei allen Regeln, die per [R=302] umgeleitet werden sollen. Kann mir jemand verraten, was da falsch läuft?
Das sollte laut Doku http://thishost[:thisport]/ davor setzen. Wenn das nicht funktioniert, gib doch mal explizit den kompletten URL als Rewrite-Ziel an.
Und beachte, was in der Doku bzgl. danach erfolgendem weiteren Rewriting, bzw. dem Einsatz des Flags [L] steht.
MfG ChrisB
Alles klar, so funktionierts:
RewriteRule ^(.*).htm$ http://%{HTTP_HOST}/$1.html [R=302,L]
Vielen Dank!
Grüße
Sven