CirTap: mod_rewrite: Ersetzen im Query String

Beitrag lesen

Hallo erstmal,

Es soll eben immer "test=bar" durch "test=foo" ersetzt werden.

Kann mir jemand auf die Sprünge helfen? :)

vielleicht.
An der reg-ex für die 2. RewriteCond musst du evtl. noch feilen, bin da kein Experte drin, habs auch so wie hier nicht direkt probiert, aber es kommt ja aufs Funktionsprinzip an :-)

RewriteCond %{REQUEST_URI} ^(.*)([?|&]test=bar)+(.*)$
  RewriteRule (.*) /umleiter.php [R=seeother,L,QSA]

Besonderes Interesse gilt ?test=bar oder &test=bar, und ([?|&]test=bar) ist vermutlich total flasch ;)

Hier ist die Bedingung dass "irgendwas mit "test=bar" in der URI an umleiter.php verweisen wird, alle anderen werden ignoriert.
Der wird als Status 303 Skript gestartet und bekommt die original-URI mit um was cleveres dawas anzufangen.
Dort verfährst du am besten wie helpercenter schon beschrieben hat und schliesst dort mit einen (zweiten) header("Location: neue-uri")
Das dürfte am flexibelsten sein, insbesondere für zukünftige Parameter-Umschiebereien.

Theoretisch könnte die RewriteRule auch so aussehen, was dir die RewriteCond und den "umleiter" spart. Bin aber auch hier nicht ganz sicher:

RewriteRule ^(.*)([?|&]test=bar)+(.*)$ index.php$1$3&test=bar [NC]

$1 und $2 sind die beiden (.*) Ausdrücke.

Teste die RegEx am besten ausserhalb von .htaccess mit einem normalen Skript mit preg_match() und ein paar Beispielstrings um zu sehen was dabei herauskommt.

Viel Spaß,
CirTap

--
You can have programs written fast, well, and cheap, but you only get to pick 2 ...
"Jeder der noch keinen Fehler gemacht hat, hat noch nie etwas Neues ausprobiert." (A. Einstein)