Вы можете сделать что-то подобное, используя mod_rewrite. Но вам нужно изменить несколько вещей вокруг.
Вместо того, чтобы иметь файл с кучей записей, которые выглядят так: Allow from 123.123.123.123
вам нужно будет создать карту ключ / значение, чтобы мы могли передать ее в RewriteMap . В этом примере, поскольку вы перечисляете набор IP-адресов, к которым вам будет разрешен доступ, файл будет содержать несколько записей, которые выглядят следующим образом: 123.123.123.123 allow
, где «123.123.123.123» - это ключ, а «allow» - это значение.
Теперь нам нужно настроить карту для этого с помощью RewriteMap
, однако, суть в том, что мы можем использовать ее только в конфигурации сервера или конфигурации виртуального хоста, а НЕ внутри Directory
, Files
, или файл .htaccess. Таким образом, вы устанавливаете это где-то в вашем httpd.conf или в файле виртуального хоста:
RewriteMap access_list txt:/home/ip.allow
Теперь вы можете получить доступ к карте access_list
в любом файле .htaccess, используя RewriteCond , который обращается к этой карте, и RewriteRule
, который ничего не делает, кроме как выдает [F]
(Запрещено):
RewriteCond ${access_list:%{REMOTE_ADDR}} =""
RewriteRule ^(.*)$ - [F,L]
RewriteCond
здесь просто пытается найти %{REMOTE_ADDR}
в качестве ключа к файлу карты. Если в вашем файле карты есть только 123.123.123.123 allow
, а удаленный адрес - 127.0.0.1
, ничто не будет совпадать, и карта вернет пустую строку, таким образом выполняя бит =""
. В противном случае, если удаленный адрес равен 123.123.123.123
, будет возвращено «allow» и условие не выполнится, что предоставит доступ.
Вы можете поиграть с предоставлением или отказом в зависимости от того, как вы настроили файл карты.