我的 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 范围限制的用户A
并B
显示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 或任何服务器端语言来实现这一点。