2012-07-25 58 views
1

這裏是我的mod_rewrite的配置:的RewriteCond EXPR 「真」=>不匹配

RewriteEngine On 
RewriteCond expr "true" 
RewriteRule .? - [L] 

RewriteRule ^(.*)$ $1 [QSA,L] 

而且這裏的相關日誌輸出:

RewriteCond: input='expr' pattern='true' => not-matched 

Apache的文件說

語法:RewriteCond TestString CondPattern

如果TestString具有特殊值expr,則CondPattern將被 視爲ap_expr

在下面的示例中,-strmatch用於比較REFERER與 站點主機名,以阻止不需要的盜鏈。

RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'" RewriteRule ^/images - [F]

所以,如果CondPattern將被視爲ap_expr和ap_expr可以按照定義明確的是true那麼爲什麼不地獄儘可能簡單的表達裝修成這種模式行不通?準確地說,匹配表達式適用於我。有誰可以驗證這種技術曾經爲任何人工作過嗎?

因爲我實際上有一個非常複雜的表達式,不能用傳統的mod_rewrite條件來完成,所以我知道我是否可以使用這種方法是非常重要的。

編輯:

對於懶惰的,這裏的BNF定義的ap_expr從here直接複製:

expr  ::= "true" | "false" 
       | "!" expr 
       | expr "&&" expr 
       | expr "||" expr 
       | "(" expr ")" 
       | comp 
+0

你確定你使用的是Apache 2.4嗎? – 2012-07-26 00:51:36

+0

@JonLin我的天啊!你是對的,我試過'apache -v',它給了我2.2.16:O和[2.2的文檔](http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html )確實不包含此功能。謝謝,請發表您的評論作爲答案,以便我可以接受。 (我永遠不會明白,爲什麼_definitive_答案經常被評論爲後綴,因爲即使這不會是_my_解決方案,也會是另一種解決方案!所以它是100%答案。) – Matmarbon 2012-07-26 08:41:09

回答

3

你確定你使用Apache 2.4? ap_expr的東西都是2.4功能集的一部分,而不是2.2的一部分的所有新功能。