9

我们的网站上有一个目录,我们只想通过几个 IP 地址访问它。所以我们有这个 .htaccess 文件来尝试让它工作:

RewriteEngine on
RewriteCond %(REMOTE_ADDR) !^123\.123\.123\.123
RewriteCond %(REMOTE_ADDR) !^124\.124\.124\.124
RewriteCond %{REMOTE_ADDR} !^125\.125\.125\.125
RewriteCond %{REMOTE_ADDR} !^126\.126\.126\.126
RewriteCond %{REMOTE_ADDR} !^127\.127\.127\.127
RewriteCond %{REMOTE_ADDR} !^128\.128\.128\.128

RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://example\.com/ [NC]

RewriteRule ^.*$ http://www.example.com [R=301,L]

我们希望它做的是,如果请求不是来自我们的 IP 地址之一(显然在上面的代码中更改了它们只是为了举例说明),或者引用者不是来自特定站点,那么将它们重定向到其他地方。

出于某种奇怪的原因,它适用于处于该位置的 IP 126.126.126.126,但不适用于其他位置。真的无法弄清楚为什么它会因IP而有所不同。可能出了什么问题?

我知道这会带来安全问题,因为引荐来源网址可能会被欺骗,但我们很快就会提出更好的解决方案,这只是一种临时措施。

4

2 回答 2

18

忘记发布这个答案。最后只是一个错字.. DOH!

如果您注意到,有些 %{REMOTE_ADDR} 行带有大括号,有些带有普通括号!他们都需要卷曲的。

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteCond %{REMOTE_ADDR} !^124\.124\.124\.124
RewriteCond %{REMOTE_ADDR} !^125\.125\.125\.125
RewriteCond %{REMOTE_ADDR} !^126\.126\.126\.126
RewriteCond %{REMOTE_ADDR} !^127\.127\.127\.127
RewriteCond %{REMOTE_ADDR} !^128\.128\.128\.128

RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://example\.com/ [NC]

RewriteRule ^.*$ http://www.example.com [R=301,L]
于 2013-10-04T13:48:14.223 回答
-2

我猜你应该在每个 RewriteCond 之后添加 [OR] 修饰符,如下所示:

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123 [OR]
RewriteCond %{REMOTE_ADDR} !^124\.124\.124\.124 [OR]
...
于 2015-03-24T11:39:31.637 回答