只允许某些IP地址使用mod_rewrite访问网站?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了只允许某些IP地址使用mod_rewrite访问网站?相关的知识,希望对你有一定的参考价值。

我们的网站上有一个目录,我们只想通过几个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地址(显然在上面的代码中为了示例而改变它们),或者引用者不是来自特定站点,那么将它们重定向到其他地方。

出于某些奇怪的原因,它适用于处于126.126.126.126位置的IP,但不适用于其他IP。真的无法弄清楚为什么它会有所不同取决于IP。怎么可能出错?

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

答案

忘了发布答案。这到底只是一个错字.. 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]
另一答案

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

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123.123.123.123 [OR]
RewriteCond %{REMOTE_ADDR} !^124.124.124.124 [OR]
...

以上是关于只允许某些IP地址使用mod_rewrite访问网站?的主要内容,如果未能解决你的问题,请参考以下文章

如何只允许从某些IP地址访问API

怎么设置才能让外网ip可以访问mysql数据库?

怎么设置才能让外网ip可以访问mysql数据库

如何用ACL限制外网访问?

ASA842只允许内网主动发起访问的流量进行PAT测试

iptables中规则的关系——以只允许某些IP段访问为例