我在处理 Allow/Deny 时遇到了一些问题,到目前为止,我已经花了大约 3 个小时来处理它,结果却很沮丧。我读过 Apache 文档和几本指南,但还是卡住了。
我的问题非常简单,或者至少我觉得应该是...我想阻止 CIDR 范围到达我主机的特定区域。在我的测试服务器中,我已经尽我所能尝试了所有可能的情况。
<LocationMatch "/myjunk/.+">
<IfModule mod_access.c>
Order Deny,Allow
Deny from 10.1.1.100/32
Allow from All
</IfModule>
</LocationMatch>
我已经在日志文件中验证了我实际上来自 10.1.1.100,我尝试过:切换到 Order Allow,Deny;去掉 /32;切换 Allow 和 Deny 行并切换 Order。如果我删除 Allow 并将 All 设置为 Deny,我会得到我想要的 403。
日志文件片段:
15128 10.1.1.100 192.168.1.100 - - [01/Nov/2011:17:36:54 -0400] "GET /myjunk/abc/def/1 HTTP/1.1" 200 8000
我在一台旧的 Solaris 机器上运行 Apache/2.0.58,不幸的是,我无法改变这一点。我拥有服务器的完全访问权限,我可以直接修改 httpd.conf 文件。
我感觉我忽略了一些东西,或者只是错过了一些小事。
答案1
更改Order Deny,Allow
为Order Allow,Deny
并重试。
请记住,按照deny,allow
顺序,deny
指令在指令之前进行评估allow
。如果客户端不匹配deny
规则或匹配allow
规则,则将授予其访问权限。
相反allow,deny
:如果客户端不匹配allow
规则或者匹配deny
规则,那么它将被拒绝访问。