Apache RewriteRule 忽略了 RewriteCond?

Apache RewriteRule 忽略了 RewriteCond?

因此,我有一个在 OSX Server 10.4 上运行的 Apache(不要问),其中包含多个站点。在 中0002_[example.com].conf,我有以下代码:

<Directory "/Library/WebServer/Documents/secret/">
    RewriteEngine On
    RewriteCond %{REMOTE_ADDR} !^137\.250\.
    RewriteRule .* /messages/secret.html
</Directory>

但是,在这种配置中,RewriteCond 似乎总是被评估为 false,因为secret即使客户端的地址不是以 137.250 开头,目录也会显示。

如果我将配置改为这样

<Directory "/Library/WebServer/Documents/secret/">
    RewriteEngine On
    RewriteRule .* /messages/secret.html
    RewriteCond %{REMOTE_ADDR} !^137\.250\.
</Directory>

条件要么根本不被评估,要么始终评估为真。无论哪种情况,全部客户端被阻止。

我究竟做错了什么?

答案1

但是,在这种配置中,RewriteCond 似乎总是被评估为 false,因为即使客户端的地址不是以 137.250 开头,也会显示秘密目录。

当然,因为这就是你用 表达的意思RewriteCond!如果你只希望 IP 地址以 开头的客户137.250.看到该secret.html页面,你需要删除!中的否定 ( ) RewriteCond

您发布的第二个片段本质上是不正确的。RewriteCond需要在RewriteRule它所指的之前。

如果你使用AllowDeny自定义 403 ErrorDocument(见访问控制)。当使用 mod_rewrite 锤子时,任何问题都开始看起来像钉子…… ;)

相关内容