Разрешить только определенные IP-адреса для доступа к сайту с mod rewrite?


У нас есть каталог на нашем сайте, к которому мы хотим получить доступ только по нескольким IP-адресам. Итак, у нас есть это .htaccess файл, чтобы попытаться заставить его работать:

RewriteEngine on
RewriteCond %(REMOTE_ADDR) !^123.123.123.123
RewriteCond %(REMOTE_ADDR) !^124.124.124.124
RewriteCond %{REMOTE_ADDR} !^125.125.125.125
RewriteCond %{REMOTE_ADDR} !^126.126.126.126
RewriteCond %{REMOTE_ADDR} !^127.127.127.127
RewriteCond %{REMOTE_ADDR} !^128.128.128.128

RewriteCond %{HTTP_REFERER} !^http://www.example.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://example.com/ [NC]

RewriteRule ^.*$ http://www.example.com [R=301,L]

Мы хотим, чтобы он сделал следующее: если запрос не приходит с одного из наших IP-адресов (очевидно, изменил их в приведенном выше коде просто для примера), или реферер не приходит с определенного сайта, то перенаправьте его в другое место.

По какой-то странной причине он работает для IP, который находится в положении 126.126.126.126 один, но не работает для других. Действительно не могу понять, почему это будет отличаться в зависимости от IP. Что может быть происходит не так?

Я понимаю, что это создает проблему безопасности, поскольку реферер может быть подделан, но мы скоро придумаем лучшее решение, это просто временная мера.

2 6

2 ответа:

Забыл опубликовать ответ на это. В конце концов, это была просто опечатка.. Дох!

Если вы заметили, некоторые строки %{REMOTE_ADDR} имеют фигурные скобки, а некоторые-обычные скобки! Они все нуждались в кудрявых.

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteCond %{REMOTE_ADDR} !^124\.124\.124\.124
RewriteCond %{REMOTE_ADDR} !^125\.125\.125\.125
RewriteCond %{REMOTE_ADDR} !^126\.126\.126\.126
RewriteCond %{REMOTE_ADDR} !^127\.127\.127\.127
RewriteCond %{REMOTE_ADDR} !^128\.128\.128\.128

RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://example\.com/ [NC]

RewriteRule ^.*$ http://www.example.com [R=301,L]

Я думаю, что вы должны добавлять модификатор [или] после каждой перезаписываемой секунды, например:

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123 [OR]
RewriteCond %{REMOTE_ADDR} !^124\.124\.124\.124 [OR]
...