mod_rewrite: Ersetzen im Query String
lupo
- webserver
0 helpercenter0 lupo
0 CirTap
Ich möchte mit mod_rewrite global für die ganze Seite Teile des Query Strings ersetzen.
Also z.B. aus
http://www.xyztest.com/index.php?test=bar
http://www.xyztest.com/index.php?test=foo
machen.
Das ganze müsste mit Wildcards für die ganze Seite sein, da es mehr als nur index.php gibt und der Query String auch mehrere Einträge haben kann, wie z.B.:
http://www.xyztest.com/test/search.php?test=bar&search=string
Es soll eben immer "test=bar" durch "test=foo" ersetzt werden.
Kann mir jemand auf die Sprünge helfen? :)
<?
$test = $_GET['test'];
if ($test == 'bar')
{
$test = 'foo';
?>
<form name='form' action='<? echo $PHP_SELF.'?test='.$test; ?>' method="post">
<script language = 'JavaScript'>
document.form.submit();
</script></form>
<?
}
echo $_SERVER['REQUEST_URI'];
?>
eine von vielen moeglichen varianten =)
gruss aus lux.
eine von vielen moeglichen varianten =)
Ja, ich müsste es aber via mod_rewrite/htaccess machen. :)
Es geht darum, dass die Seiten Ihre Querystring-Struktur verändern und das Besucher die über die alten URIs (z.B. von Suchmaschinen) kommen auf die neuen umgeleitet werden.
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