403 错误来自 403 ErrorDocument

403 错误来自 403 ErrorDocument

我的 Apache 2.4.7 安装中有以下配置脚本:

<Directory "/www">
    Options Indexes FollowSymLinks
    AllowOverride All
    <RequireAll>
        Require all granted
        Require not ip ip.range.A ip.range.B
    </RequireAll>
    RewriteEngine On
    RewriteRule ^faq/(\w+)/(\d+)/?$ faq.php?code=$1&num=$2 [NC]
    ErrorDocument 403 /www/faq.php?code=web&num=403
</Directory>

而且,当我尝试使用其中一个被阻止的 IP 地址查看页面时,收到此错误:

此外,尝试使用 ErrorDocument 处理请求时遇到 403 Forbidden 错误。

因为我想要为传入的客户端提供两种 403;我必须重定向受 IP 范围限制的用户AB显示faq/WEB/403/页面。

有没有什么方法可以阻止具有这些 IP 的用户访问并向他们显示我的自定义ErrorDocument页面?

我确实尝试使用以下内容代替标签requireAll(如定义RewriteCond指令中):

RewriteCond %{REMOTE_HOST}  ^ip.range.A  [OR]
RewriteCond %{REMOTE_HOST}  ^ip.range.B
RewriteRule /faq/WEB/403/ [L,R]

但无济于事。在后一种情况下,用户可以自由访问页面。

当前配置文件如下(并且没有用户被阻止访问网页):

<Directory "/www">
    Options Indexes FollowSymLinks
    AllowOverride All
    RewriteEngine On
    RewriteRule ^faq/(\w+)/(\d+)/?$ faq.php?code=$1&num=$2 [NC]
    RewriteCond %{REMOTE_HOST}  ^ip.range.A  [OR]
    RewriteCond %{REMOTE_HOST}  ^ip.range.B
    RewriteRule /faq/WEB/403/ [L,R]
</Directory>

答案1

对于此错误:

此外,尝试使用 ErrorDocument 处理请求时遇到 403 Forbidden 错误。

您正在保护 /www 目录。由于 403 文件也位于此目录中,因此无法提供该文件,因为用户无法访问此内容。您需要将 403 页面放在它自己的目录中,该目录不属于 /www。

关于根据源 IP 设置两个独立页面,我不确定您是否可以仅使用 apache 配置来实现这一点。ErrorDocument是会中断正常 apache 流程的“特殊”命令。更好的方法是使用 PHP 或任何服务器端语言来实现这一点。

相关内容