htaccess-Problem bei Umschreibung URL mit 3 Parametern
svenfinger
- webserver
0 ChrisB
Hi,
ich suche mir jetzt schon seit Tagen einen Ast ab, um eine Möglichkeit zu finden, meine URLs von
http://www.example.com/index.php?page=abc&sub=def&sub2=ghi
in
http://www.example.com/abc/def/ghi/
umzuschreiben.
Bisher sieht meine .htaccess Datei so aus:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)/$ ?page=$1
RewriteRule ^(.*)/(.*)/$ ?page=$1&sub=$2
RewriteRule ^(.*)/(.*)/(.*)/$ ?page=$1&sub=$2&sub2=$3
Es funktioniert insofern, dass ich URLs wie
http://www.example.com/abc/
http://www.example.com/def/
http://www.example.com/ghi/
aufrufen kann, sobald ich aber URLs wie
http://www.example.com/abc/def/
http://www.example.com/abc/def/ghi/
aufrufe, sehe ich anhand von print_r($_GET), dass der page-Parameter leer ist. Die zwei Sub-Parameter sind korrekt gefüllt.
Sobald ich die Zeile
RewriteRule ^(.*)/$ ?page=$1
bzw.
RewriteRule ^(.*)/(.*)/$ ?page=$1&sub=$2
auskommentiere, funkioniert zumindest die URL-Umschreibung
http://www.example.com/abc/def/
bzw.
http://www.example.com/abc/def/ghi/
aber nicht mehr http://www.example.com/abc/.
Das Verhalten ist ja an sich logisch. Es wird immer die erste RewriteRule genommen und interpretiert. Aber wie kann ich nun per RewriteCond(?) festlegen, wann er welche RewriteRule verwendet? Ist der Weg mit RewriteCond überhaupt der richtige, oder bin ich ganz auf dem falschen Dampfer mit meiner RewriteRule?
Hi,
ich suche mir jetzt schon seit Tagen einen Ast ab, um eine Möglichkeit zu finden, meine URLs von
http://www.example.com/index.php?page=abc&sub=def&sub2=ghi
in
http://www.example.com/abc/def/ghi/
umzuschreiben.
Nein, die Richtung, in der dum Umschreiben möchtest, ist genau die entgegengesetzte.
Das Verhalten ist ja an sich logisch. Es wird immer die erste RewriteRule genommen und interpretiert.
Nein, es werden *alle* nacheinander ausgewertet, so lange nicht explizit gegenteiliges angegeben ist.
Und nach dem Umschreiben geht es in die nächste Runde, bei der mit der „neuen“ Adresse wieder geschaut wird, ob es eine zutreffende Regel gibt. (Das gilt sofern die Regeln per .htaccess-Datei angegeben werden.)
Auch auf /abc/def/ trifft eine Regel, die ^(.*)/$ matchen möchte, natürlich zu.
Dreh die Reihenfolge der Regeln mal um.
MfG ChrisB