因此,我有一个在 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
它所指的之前。
如果你使用Allow
和Deny
自定义 403 ErrorDocument
(见访问控制)。当使用 mod_rewrite 锤子时,任何问题都开始看起来像钉子…… ;)