2009-10-09 77 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