htaccess url regex display“&”如果反向引用匹配

时间:2011-04-08 12:11:51

标签: regex .htaccess url-rewriting

我在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

是否有可以执行此操作的正则表达式模式?

1 个答案:

答案 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)的存在。