這裏是我的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
你確定你使用的是Apache 2.4嗎? – 2012-07-26 00:51:36
@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