mod_rewrite:替换query_string参数值

时间:2013-11-06 13:23:34

标签: apache url mod-rewrite redirect query-string

我需要使用Apache mod_rewrite替换QueryString的值。许多值必须由一个新值替换({oldValueA1,oldValueA2} => newValueA; {oldValueB1,oldValueB2} => newValueB)。该参数在query_string中出现变量次数。参数值的顺序是随机的。如果重定向的query_string包含两次值,则对我来说无关紧要。 request_uri是可变的,但在重定向期间不应该更改。

以下是一些例子。第一行包含原始URL,第二行包含新URL。

localhost/mag/cat/?myParameter=oldValueA1&myParameter=oldValueB1
localhost/mag/cat/?myParameter=newValueA&myParameter=newValueB

localhost/mag/?myParameter=oldValueA2
localhost/mag/?myParameter=newValueA

localhost/dig/cat/?myParameter=oldValueB1&myParameter=oldValueA2
localhost/dig/cat/?myParameter=newValueB&myParameter=newValueA

localhost/dig/?myParameter=oldValueB2&oldValueB3
localhost/dig/?myParameter=newValueB&newValueB

我尝试了一些RewriteRules和一些条件,但我找不到解决这个问题的方法。有人有想法吗?

THX! :)

1 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法。也许它会帮助别人。这是:

RewriteCond %{QUERY_STRING} ^(.*[&?]|)myParameter=(oldValueA1|oldValueA2)([&?].*|)$
RewriteRule ^(.*)$ $1?%1myParameter=newValueA [R=301,NC,L]
RewriteCond %{QUERY_STRING} ^(.*[&?]|)myParameter=(oldValueB1|oldValueB2)([&?].*|)$
RewriteRule ^(.*)$ $1?%1myParameter=newValueB [R=301,NC,L]