sanchez hat geschrieben:(so eine Art Schleife)
Bei "Schleife" hat's geklingelt :) Es gibt in der Tat die Möglichkeit, mit dem N-Parameter alle Regeln nochmal von vorne durchlaufen zu lassen. Damit bekommst Du dann wider Erwarten tatsächlich das, was Du haben wolltest:
RewriteEngine on
RewriteBase /
RewriteRule ^module/
(.+/)?
([a-zA-Z0-9]+)_([a-zA-Z0-9%]+)/
([a-z]+\.html)$ module/
$1$4?
$2=$3 [QSA,N,L]
RewriteRule ^module/[a-z]+\.html$ index.php
Die erste RewriteRule-Zeile trennt den jeweils
letzten x_y-Block aus dem Pfad und hängt ihn als URL-Parameter an die
Rest-
URL an. Dieser Schritt wird in einer Schleife ausgeführt: Aus "module/
a_1/b_2/
bla.html" wird "module/
a_1/bla.html?
b=2", dann geht's in die Schleife und es entsteht "module/bla.html?a=1&b=2".
URL-Parameter werden von mod_rewrite grundsätzlich erstmal abgetrennt (weshalb sie auch nur mit RewriteCond abzufragen sind), QSA sorgt dafür, dass sie an die neue URL wieder angehängt werden. Dieser Vorgang ist auch der Grund dafür, dass wir die Blöcke zwar von hinten aufrollen, sie aber trotzdem als URL-Parameter in der richtigen Reihenfolge erscheinen.
N sorgt wie schon angedeutet dafür, dass der Prozess mit der neuen URL von vorne beginnt.
Das L ist nötig, weil einige mod_rewrite-Versionen die neue URL fehlerhaft zusammensetzen. Die neue URL ist dann nicht nur unbrauchbar, wegen dem N landet man in diesem Fall auch noch in einer Endlosschleife.
Die zweite RewriteRule-Zeile sorgt dafür, dass ganz zum Schluss, wenn alle x_y-Blöcke in URL-Parameter angehängt wurden ("module/bla.html?a=1&b=2&c=3"), index.php aufgerufen wird.