2009-10-09 75 views
2

的RewriteCond匹配我必须做一个重定向到另一主机,如果特定参数/值对是在查询字符串。对于某些查询参数/值对

到目前为止,我有

,对于工作:

/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,匹配不管它在哪里发生的模式。

对此有何建议? :-)

回答

6

我想试试这个正则表达式(&|^)abc=23(&|$)并且匹配仅针对%{QUERY_STRING}

+0

谢谢你,完全适用于我! :-) – Alex 2009-10-09 08:31:58

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 &或ABC = 23,ABC = 234是一个有效的匹配。你真正想要的是&或没有别的。我不知道这正则表达式是合法的阿帕奇,但它会被写为:

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

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

abc=23&def=123 
abc=234 
abc=23 
+0

谢谢,我知道的问号使得前面的标记可选。我确实添加了它,因为否则它不会匹配的index.php?ID = 95&ABC = 23 – Alex 2009-10-09 08:31:24

+0

哦,我看到卢卡斯已经写了(如果有一个“&”后23将只匹配)。嗯,需要输入更快。 – Andrew 2009-10-09 08:39:29

+0

顺便说一句,有没有必要逃避'?'一个字符类中。 '[&?]'是完全有效的,并且匹配一个&符号或一个问号。 – davidchambers 2010-09-15 10:18:20