Apache 2.4 将 URL 限制为特定 IP

Apache 2.4 将 URL 限制为特定 IP

我正在尝试将特定 URL 限制为仅供网络外的特定 IP 地址使用。当外部用户尝试访问该 URL 而不是来自 IP 列表的用户时,他应该被重定向到主页。

这是我到目前为止尝试过的方法,但没有任何效果。最后一部分它将所有人重定向到主页,无论 IP 是什么。

<Location "/secret">
#    <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
#    Redirect 303 "/secret" /
#    </If>

RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]

LogLevel debug rewrite:trace6
</Location>

PS:/secret URL 实际上是一个虚拟 URL,在驱动器上并不物理存在。

答案1

用于Require [ip|host|env]指定谁有权访问您的虚拟主机或位置。

    <Directory "/docroot">
        Require ip 10.10.11.12
    </Directory>   

当谈到重定向时,考虑一下自定义错误页面。这更为普遍,因为每个未经授权的访问都会引发 403 错误,因此可以轻松进行评估。

我从未在 apache 上这样做过,但在 nginx 上使用了这种策略。对于 apache,应该这样做:

ErrorDocument 403 http://homepage.example.com

自定义错误文档使用 ErrorDocument 指令进行配置,该指令可用于全局、虚拟主机或目录上下文。如果 AllowOverride 设置为 FileInfo,则可在 .htaccess 文件中使用。(来自 apache 文档)

答案2

在 Apache 2.4 中,Order、Deny 和 Allow 选项已被替换为

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
</Directory>

您可以通过使用以下命令明确限制地址:

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
    Require not ip 192.168.0.1
</Directory>

完全相反的情况也是如此,为了限制所有内容并仅允许子集使用以下命令:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
</Directory>

更多信息请访问Apache 2.4 访问控制文档。

关于您的问题(由于缺少要点来添加评论,因此我编辑了我自己的问题),您应该能够简单地设置一个 ErrorDocument,并将索引设置为 URL 路径:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
    ErrorDocument 401 /index.html
</Directory>

希望这可以帮助!

答案3

对于 Apache 2.4,您可以使用 <RequireAny>。您可以在 vhost 或 .htaccess 文件中执行此操作....

SetEnvIF IP xxx.xxx.xxx.xxx AllowThisIP  # Or X-Real-IP
SetEnvIF IP yyy.yyy.yyy.yyy AllowThisIP
<RequireAny>
  Require env AllowThisIP
  Require host example.com
</RequireAny>

Apache 文档https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#requireany

相关内容