RewriteCond expr“true”=>不匹配

时间:2012-07-25 22:26:33

标签: apache mod-rewrite

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

1 个答案:

答案 0 :(得分:3)

你确定你使用的是apache 2.4吗? ap_expr内容是2.4功能集中的所有新功能,而不是2.2的一部分。