所以我有一个运行在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之前。
如果您使用Allow , Deny和自定义的403 ErrorDocument (请参阅访问控制 ),会更容易。 当使用mod_rewrite锤子,任何问题开始像一个钉子…;)