我在IIS6上使用IsapiRewriter,但我认为这个问题比这更普遍。我也很确定没有办法做到这一点,但我决定要问那些知道更多正则表达式的人,而不是在完全放弃之前。
我正在匹配以下网址:
^/term1(\?)?(.*)
成功匹配
http://domain.tld/term1?utm=1234
以及在
等模式中使用时^/term1(\?)?(.*) /term1handler.aspx$1$2 [I]
非常正确地重定向
http://domain.tld/term1?utm=1234
到
http://domain.tld/term1handler.aspx?utm=1234
但是,我的一些重定向需要重定向到输出中已有查询字符串参数的内容。现有的重定向看起来像
^/term1 /term1handler.aspx?ID=12345 [I]
我想找到一个解决方案,允许我用&符替换1美元,如果有匹配,那么我最终会
http://domain.tld/term1handler.aspx?ID=12345&utm=1234
是否有可以执行此操作的正则表达式模式?
答案 0 :(得分:1)
您的规则应该使用%{QUERY_STRING},并且必须在RewriteFlag中使用QSA标记,如下所示:
RewriteCond %{QUERY_STRING} ^(utm=.*)$
RewriteRule ^term1/?$ term1handler.aspx?%1 [R,L,QSA,NE]
QSA标志将确保使用其他查询参数utm=1234
附加ID=12345
查询参数,从而使复合REQUEST_URI像/term1handler.aspx?ID=12345&utm=1234
来自手册http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
'qsappend | QSA'(查询字符串追加) 此标志强制重写引擎将替换字符串的查询字符串部分附加到现有字符串,而不是替换它。如果要通过重写规则向查询字符串添加更多数据,请使用此选项。
此处还使用NE
(无转义)来处理查询参数中特殊字符(;, %, $ etc)
的存在。