这是我的 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 条件完成,所以知道我是否可以使用这种方法对我来说非常重要。
编辑:
对于懒惰的人,这里直接从这里复制了 ap_expr的BNF定义:
expr ::= "true" | "false"
| "!" expr
| expr "&&" expr
| expr "||" expr
| "(" expr ")"
| comp