apache服务利用.htaccess规则禁止部分IP地址访问网站

97

apache服务使用.htaccess文件来禁止部分用户IP访问,详细设置方法如下:

打开.htaccess文件,在最下面添加如下语句:

Order Deny,Allow
deny from 192.168.1.1
以上语句即可禁止192.168.1.1地址的访问


如要禁止一个Ip地址段,可以用下面的方法:

Order Deny,Allow
deny from 192.168.1
这样就可以禁止192.168.1.0-192.168.1.255之间所有的IP地址访问本站。


如果是屏蔽多个IP,中间用空格隔开就可以:

Order Deny,Allow
deny from 192.168.1.1 222.222.222.222
这样就可以禁止192.168.1.0-192.168.1.255之间所有的IP地址访问本站。


一般来说直接把上面的语句添加到.htaccess就会生效,不用重启Apache服务(况且虚拟主机里我们也没有权限重启Apache),我测试过是可以的(把自己的IP禁止再访问网站),效果如下:

22.png

由于Web请求先到路由层,所以需要通过HTTP请求头的X-Forwarded-For字段获取客户端真实IP,但是有些虚拟主机即使.htaccess添加Order Deny,Allow也是没有效果,不能禁止到目标IP的访问,可能是没有Allow,Deny功能,也可能是需要重启Apache。后来才看到官方有提供解决办法:

.htaccess添加以下代码:


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{http:X-Forwarded-For}&%{REMOTE_ADDR}&%{http:X-Real-IP} (192.168.1.1|192.168.1.2|192.168.1.x) [NC]
RewriteRule (.*) - [F]
</IfModule>

屏蔽多个IP用”|”隔开,如:192.168.1.123|168.153.21.23;屏蔽IP段还是一样:192.168.1

如果你的.htaccess添加Order Allow,Deny同样没有效果,可以试试这段代码,应该就可以了