Apache 2.4 将 URL 限制为某些 IP

Den*_*ler 15 ip 301-redirect restriction apache-2.4

我试图将特定 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>
Run Code Online (Sandbox Code Playgroud)

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

Lin*_*ztm 25

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

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

您可以通过使用以下内容来明确限制地址:

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
    Require not ip 192.168.0.1
</Directory>
Run Code Online (Sandbox Code Playgroud)

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

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
</Directory>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


ans*_*men 6

使用Order,Denyallow指定谁可以访问您的虚拟主机或位置。

<VirtualHost *:80>
    ServerName example.net
    DocumentRoot /docroot

    <Directory "/docroot">
        Order Deny,Allow
        Deny from all
        Allow from 10.10.10.10
        Allow from 10.10.11.0/24
    </Directory>   
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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

我从来没有用 apache 做过这个,但是在 nginx 上使用这个策略。对于 apache 这样的事情应该做:

ErrorDocument 403 http://homepage.example.com
Run Code Online (Sandbox Code Playgroud)

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

  • 此语法在 apache 2.4 中已弃用 (4认同)
  • 这看起来像一组 Apache httpd 2.2 配置。它仍然适用于 2.4 吗? (3认同)
  • 为什么这是公认的答案?正如问题所暗示的那样,这是针对 Apache 2.2 而不是 2.4 的……这行不通。 (3认同)