1

这是我的 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
4

1 回答 1

3

你确定你使用的是 apache 2.4 吗?这些ap_expr东西都是 2.4 功能集的一部分而不是 2.2 的一部分的所有新功能。

于 2012-07-26T17:11:43.970 回答