RewriteCond匹配某些Query参数/值对

时间:2009-10-09 08:08:26

标签: regex .htaccess mod-rewrite

如果某个参数/值对在查询字符串中,我必须重定向到另一台主机。

到目前为止我已经

RewriteCond %{REQUEST_URI}?%{QUERY_STRING} [&\?]abc=23&?
RewriteRule ^(.*)$ http://anotherserver.com/$1 [R,NC,L]

适用于:

/index.php?id=95&abc=23
/index.php?abc=23&id=95
/index.php?id=95&abc=23&bla=123

但它也匹配/index.php?id=95&abc=234

我需要一个与abc=23完全匹配的模式,无论它出现在何处。

对此有何建议? : - )

2 个答案:

答案 0 :(得分:6)

我会尝试使用此正则表达式(&|^)abc=23(&|$)并且匹配仅针对%{QUERY_STRING}

答案 1 :(得分:1)

The question mark makes the preceding token in the regular expression optional. E.g.: colou?r matches colour or color.

RewriteCond %{REQUEST_URI}?%{QUERY_STRING} [&\?]abc=23&?

你匹配abc = 23& OR abc = 23,其余字符串不受约束,因此abc = 234是有效匹配。你真正想要的是&或者没别的。我不确定这个RegExp在Apache中是否合法,但它将写成:

RewriteCond %{REQUEST_URI}?%{QUERY_STRING} [&\?]abc=23(&|$)

以下是我在favourite online RegExp tester使用的测试用例:

abc=23&def=123
abc=234
abc=23