RewriteRule-Problem

Moin,

was mache ich falsch?

RewriteRule ^foo(.*).php$ /verzeichnis/foo.php?bar=$1

funktioniert, wenn ich als URL http://server/foobar.php eingebe (dann wird /verzeichnis/foo.php?bar=bar aufgerufen).

Ich möchte aber, dass man http://server/verzeichnis/foobar.php eingeben kann und habe die RewriteRule daher so geändert:

RewriteRule ^/verzeichnis/foo(.*).php$ /verzeichnis/foo.php?bar=$1

Dann kriege ich aber einen 404er Fehler.

Meine Vermutung war, dass der führende Slash zuviel sein könnte, aber

RewriteRule ^verzeichnis/foo(.*).php$ /verzeichnis/foo.php?bar=$1

liefert mir einen 500er Fehler.

Wo ist mein Denk- oder sonstiger Fehler?

Danke,
-Efchen

Hallo,

verzeichnis/foo.php?bar=$1 wird durch die Regel auch wieder gematched. Wenn du (.) durch (.+) ersetzt, dann matcht er auch nur die foo.php, die wirklich ein Anhängsel haben.

N43

Wieso? Es heißt doch am Ende „.php$“, also dass nach der Endung .php nichts mehr kommt. Oder werden Parameter nicht gematched?

Hilft das Tauschen der Regeln?

RewriteRule ^verzeichnis/foo(.*).php$ /verzeichnis/foo.php?bar=$1 [B][L][/B] RewriteRule ^foo(.*).php$ /verzeichnis/foo.php?bar=$1
Ich sehe nicht, wo sich das Ergebnis unterscheided.

Ich habe nur eine RewriteRule, nicht zwei. Und der Unterschied soll ja sein, dass man die URL nur in diesem einen Unterverzeichnis aufrufen kann.

Jup, das Matching betrifft nur den Dateinamen / Pfad.

Ich hab das ganze mal ausprobiert. Mit .* bleibt man an einer ewigen Weiterleitung hängen. (Sieht man auch, wenn man R=301 setzt, dann bricht der FireFox iwann. ab). Mit .+ klappt es.

N43

Ich habs jetzt übrigens hinbekommen. Ich glaube, Dein Hinweis mit dem + war wirklich der entscheidende Tipp. Geht jetzt alles so, wie ich das will und ist eigentlich auch nicht so kompliziert - wenn man RegExps kann :wink:

Gute Nacht und danke nochmal!
-Efchen

ich habe ungefährt dasselbe problem.

ich habe nun eine htaccess erstellt, dort steht

[html]RewriteEngine On
RewriteRule ^information/$ /?section=information[/html]wenn ich nun meine seite aufrufe unter http://domain.de/information/ zeigt dieser mir den serverfehler 500 an. ist irgendwas falsch geschrieben oder ähnl.?

muss ich evtl. irgendwie noch in der apache cfg mod rewrite einschalten?

Ja, ich denke deswegen kommt der Fehler. Du hättest im IRC ruhig sagen können, dass das einen 500-Fehler wirft.

Wenn kein mod_rewrite angeschaltet ist (also das Modul nicht geladen wird), kommt auch kein 500er. Der Fehler kommt nur, wenn jemand das auch versucht zu parsen.