2

我有一个非常简单的.htaccess文件:

<RequireAll>
    Require all granted

    # require localhost
    Require ip 127.0.0.1
</RequireAll>

它工作......有时!

有时,它会给我一个 403,并error.log解释说:

[客户端 ::1:65443] AH01630:客户端被服务器配置拒绝

为什么它不会将该本地客户端与Require ip 127.0.0.1规则匹配?

4

4 回答 4

8

事实证明,Apache 2.4 的Require与 IP完全匹配。如果您有多个 IP 地址 aliasing 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>
于 2014-11-02T11:54:20.647 回答
1
Require ip 127.0.0.1
Require ip ::1
于 2015-11-15T16:07:09.923 回答
0

我不使用 .htaccess,因为我的工作站上安装了 Apache,并且可以完全访问 http.conf 文件。但是对于像 phpmyadmin 这样我想限制人们登录的网站,我有这个:

Require all denied
Require ip 127.0.0.1

第一行拒绝所有人访问,包括我自己的工作站。第二行将我的工作站 localhost ip 添加到仅允许的连接列表中。

没有RequireAllRequireAny标签。再次在 .htaccess 中可能需要这些标签。

于 2015-07-27T03:28:50.190 回答
0

Require all grant等同于:

Order allow,deny
Allow from all

从早期的 Apache 版本开始,该版本向所有人开放该站点。如果您的意图是阻止除某些 IP 之外的所有人访问该网站,您应该从以下内容开始:

Require all denied

您可以在此处找到更多信息:从 2.2 升级到 2.4

于 2015-07-23T20:14:51.890 回答