[mod_rewrite] Regel wird nicht gematched

Sjune

Alter Benutzer
ID: 127247
L
16 Juli 2006
14
0
Servus,

ich habe ein Problem mit den folgenden zwei Regeln:

Code:
RewriteRule ^admin/(.*)$ index.php?__admin=1&%{QUERY_STRING} [L]
RewriteRule ^([^/]*)$ index.php?1=$1 [L]

Diese stehen in dieser Reihenfolge in der htaccess Datei.
Wenn ich nun /admin/ aufrufe wird die 2. Regel gematched. Hier verstehe ich nicht, wieso nicht die 1. ausgewählt wird. Denn sollte ich die 2. entfernen, wird bei gleichem Aufruf auch die 1. ausgewählt.

Das verstehe ich absolut nicht.
Würde mich sehr freuen wenn mir jemand weiterhelfen kann!

Sjune
 
Zuletzt bearbeitet:
Der erste Regel sieht n bisschen komisch aus, mit den zwei Fragezeichen aufeinander. Eigentlich müsste da escapt werden. Nimm doch mal probeweise beide Fragezeichen raus. Wegen dem .* danach sind die ja eh überflüssig.

Erklären tut das aber deine Beobachtung auch nicht - sollte es da dran liegen :think:
 
Danke für deine Antwort.

Ja, das "??" war wohl unnütze - habe es entfernt. Das Problem bleibt leider erhalten. Verstehe ich einfach nicht :(

Jemand vlt. eine Idee wie man das evtl. umschreiben könnte um das "Problem" zu umgehen?
 
Ich muss gestehen, ich arbeite nicht so viel mit mod_rewrite, aber ist es nicht eher so, dass beide Regeln angewendet werden? Erst die erste Regel, dann die zweite? Ich würd das jedenfalls so machen, wenn ich Server wär. (Bin ich aber zum Glück nicht :ugly:)
 
@MBGucky:
Nö. Im Normalfall ja, hast du recht, allerdings legen beide Regeln fest, dass das jeweils die letzte ([L]) Regel ist, d.h. matcht diese, werden keine weiteren Regeln angewendet.
 
Hi,

ich würde bei deiner ersten Regel noch ein Fragezeichen ergänzen hinter (.*) :
Code:
^admin/(.*)?$
dann sollte die Regel eigentlich auch zutreffen wenn du admin/ aufrufst. Hinter dem Slash kann dann was kommen, muss aber nicht.
 
Einen *-Quantor noch mit einem ?-Quantor zu verfeinern wird wohl herzlich wenig bringen :ugly:

Wenn * genau 0x matcht, ist es egal, ob ? 1x oder 0x matcht, weil 0*1 = 0*0 = 0.
Wenn * mehr als 0x matcht, matcht ? immer genau 1x, weil 0*n<>0 für n<>0 nicht erfüllbar ist.
 
war auch nur ne Idee, weil die erste Regel nicht geht. Sieht ja eigentlich alles gut aus.
Ich hatte es schon öfter gehabt, das auf einem Server eine Regel geht und auf einem anderen nicht.
 
Eigentlich dürfte doch "([^/]*)" für "admin/" überhaupt nicht matchen, kommt ja schließlich ein Slash vor...?!

Weiterhin habe ich festgestellt, dass bei folgender Anpassung auch die 1. Regel bei admin/ matched...

Code:
RewriteRule ^admin/(.*)$ index.php?__admin=1&%{QUERY_STRING} [L]
RewriteRule ^([^/]*)$ index.php?1=$1&%{QUERY_STRING} [L]
 
Zuletzt bearbeitet: