Динамический доступ .htaccess (включая общесистемный файл) - PullRequest
4 голосов
/ 19 сентября 2011

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

Короче говоря:

  • У меня есть список IP-адресов, сохраненных в файле / базе данных
  • , на основе этого списка я создаю файл, скажем, /home/ip.allow
  • файл содержит Allow записей (Allow from 123.123.123.123)

В доменах / поддоменах, которые я размещаю на этом сервере, у меня есть простые файлы .htaccess со следующим содержимым:

RewriteEngine On
Order allow, deny
Deny from all

Интересующая меня вещьВот как мне включить это /home/ip.allow, чтобы мне не приходилось программно находить и редактировать все файлы .htaccess в пути vhosts (наличие всех условий в одном файле сделало бы мою жизнь намного проще).

Я нашел директиву RewriteMap в документации Apache mod_rewrite , но, похоже, она применима только для переписывания, но не для предоставления доступа.

Есть идеи по этому вопросу?

1 Ответ

3 голосов
/ 20 сентября 2011

Вы можете сделать что-то подобное, используя 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» и условие не выполнится, что предоставит доступ.

Вы можете поиграть с предоставлением или отказом в зависимости от того, как вы настроили файл карты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...