Ошибка 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 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 или на любом серверном языке.

Другие вопросы по тегам