这是我的mod_rewrite配置:
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复制的here ap_expr定义:
expr ::= "true" | "false"
| "!" expr
| expr "&&" expr
| expr "||" expr
| "(" expr ")"
| comp
答案 0 :(得分:3)
你确定你使用的是apache 2.4吗? ap_expr
内容是2.4功能集中的所有新功能,而不是2.2的一部分。