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> 

然而,在这个configuration中,RewriteCond总是被认为是false,因为即使客户端的地址不是以137.250开始, secret目录也会被显示出来。

如果我改变configuration这个

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

该条件要么根本没有得到评估,要么始终评估为真。 无论哪种方式, 所有的客户端被阻止。

我究竟做错了什么?

然而,在这个configuration中,RewriteCond总是被认为是false,因为即使客户端的地址不是以137.250开始,秘密目录也会被显示出来。

当然,因为这就是你用RewriteCondexpression的东西! 如果您只想要IP地址以137.250.开头的客户端137.250. 要查看secret.html页面,您需要删除RewriteCond中的否定( ! )。

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

如果您使用AllowDeny和自定义的403 ErrorDocument (请参阅访问控制 ),会更容易。 当使用mod_rewrite锤子,任何问题开始像一个钉子…;)