0

这就是我想要做的:任何无法在一台机器上解析的 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)也尝试过同样的事情。

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

4

1 回答 1

4

同样的问题。此外,我通过添加增强配置

RewriteCond %{IS_SUBREQ} =false

作为第一个测试条件。我认为否则它将是永无止境的递归。

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

于 2012-11-08T13:30:10.057 回答