Apache mod_rewrite RewriteCond -U标志误报

时间:2012-07-29 07:33:17

标签: apache mod-rewrite

这就是我要做的事情:任何在一台机器上无法解析的URI都会通过反向代理被撞到另一台机器上。配置如下所示:

RewriteEngine On
RewriteCond %{REQUEST_URI} !-U
RewriteRule ^/(.*)$ http://other.site/$1 [P,NS]

现在,应该说的是“如果我通过运行子请求在本地找不到任何内容,请将其发送给代理。”

唯一的问题是,它没有那样做。随着RewriteLogLevel的升级,我得到了这个:

31.3.3.7 - - [29/Jul/2012:00:26:18 --0700] [internet.srs.bznz/sid#7fc6099fa228][rid#7fc609bf2bf0/initial] (5) RewriteCond URI (-U) check: path=/ -> status=200
31.3.3.7 - - [29/Jul/2012:00:26:18 --0700] [internet.srs.bznz/sid#7fc6099fa228][rid#7fc609bf2bf0/initial] (4) RewriteCond: input='/' pattern='!-U' => not-matched

该机器上/上没有任何东西。它应该返回403.所以我的问题是:到底哪里有200 OK来自?这是一个全新的Debian VPS,所以它不像配置中有任何污染。我在其他地方尝试了同样的事情(Ubuntu 12.04)和同样的事情。

如何找出造成错误成功代码的原因?

1 个答案:

答案 0 :(得分:4)

同样的问题。此外,我通过添加

来增强配置
  

RewriteCond %{IS_SUBREQ} =false

作为第一个测试条件。我认为这将是无休止的递归。

但我的经验是,任何现有或不存在的URI都会被评估为OK(200)。我不知道为什么,但它可能只测试该URI的服务器配置 - 路径是允许还是拒绝Deny from allRewriteRule [F]