svenfinger: htaccess-Problem bei Umschreibung URL mit 3 Parametern

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?

  1. 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

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?