我有一个非常简单的.htaccess
文件:
<RequireAll>
Require all granted
# require localhost
Require ip 127.0.0.1
</RequireAll>
它有效......有时候!
有时,它会给我一个403,error.log
解释:
[client :: 1:65443] AH01630:服务器配置拒绝客户端
为什么它不会将本地客户端与Require ip 127.0.0.1
规则匹配?
答案 0 :(得分:4)
事实证明,Apache 2.4的Require匹配IP 完全。如果您有多个IP地址别名localhost
,则需要列出所有这些别名(或使用特殊别名,如果存在,如下所述)。
在这种特殊情况下,error.log
条目显示全部:客户端通过IPv6接口(ip == :: 1)连接。这也需要列入白名单:
<RequireAll>
Require all granted
# require localhost
<RequireAny>
Require ip 127.0.0.1
Require ip ::1
</RequireAny>
</RequireAll>
非常欢迎任何关于是否有更简单/更安全的方法来完成此任务的建议!
<强>更新强>
正如Helge Klein所示,Require local
是要走的路:
<RequireAll>
Require all granted
# require localhost
Require local
</RequireAll>
答案 1 :(得分:0)
要求全部授予相当于:
Order allow,deny
Allow from all
来自早期Apache版本的,它向所有人开放网站。如果您打算将网站阻止给每个人,除了某些IP,您应该从:
开始Require all denied
您可以在此处找到更多信息:Upgrading to 2.4 from 2.2
答案 2 :(得分:0)
我没有使用.htaccess,因为我在工作站上安装了Apache,并且可以完全访问http.conf文件。但对于像phpmyadmin这样我想限制人们登录地点的网站,我有这个:
Require all denied
Require ip 127.0.0.1
第一行拒绝访问所有人,包括我自己的工作站。 第二行将我的工作站localhost ip添加到仅允许的连接列表中。
否 RequireAll 或 RequireAny 标记。再次在.htaccess中可能需要这些标签。
答案 3 :(得分:0)
Require ip 127.0.0.1
Require ip ::1