这就是我要做的事情:任何在一台机器上无法解析的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)和同样的事情。
如何找出造成错误成功代码的原因?
答案 0 :(得分:4)
同样的问题。此外,我通过添加
来增强配置
RewriteCond %{IS_SUBREQ} =false
作为第一个测试条件。我认为这将是无休止的递归。
但我的经验是,任何现有或不存在的URI都会被评估为OK(200)。我不知道为什么,但它可能只测试该URI的服务器配置 - 路径是允许还是拒绝Deny from all
或RewriteRule [F]