В моей установке 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>
Для этой ошибки:
Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 403 Forbidden.
Вы защищаете каталог / www. Поскольку файл 403 также находится в этом каталоге, он не обслуживается, поскольку доступ к этому контенту пользователю запрещен. Вам нужно поместить свою страницу 403 в отдельный каталог, который не принадлежит / www.
Имея две отдельные страницы в зависимости от исходного IP-адреса, я не уверен, что вы можете сделать это только с конфигурацией apache. ErrorDocument
это «специальные» команды, которые прерывают нормальный поток apache. Лучше было бы сделать это на PHP или любом серверном языке.