htaccess — получение IP-адреса из файла

#.htaccess

#.htaccess

Вопрос:

У меня есть PHP-скрипт, который собирает текущий DHCP-адрес определенного домена, который записывается в файл.

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

Раньше я использовал:

 RewriteCond %{REMOTE_HOST} ^example.com$ [NC]
RewriteCond %{REQUEST_URI} ^/wp-login.php$
RewriteRule ^(.*)$ blackhole.html [L,R]
  

Сейчас я размещен на сервере LiteSpeed, который не выполняет обратный поиск DNS, поэтому я не могу использовать какие-либо запросы по имени хоста.

Пожалуйста, требуется простое решение.

Ответ №1:

 RewriteCond %{REMOTE_HOST} ^example.com$ [NC]
RewriteCond %{REQUEST_URI} ^/wp-login.php$
RewriteRule ^(.*)$ blackhole.html [L,R]
  

Кроме того: этот код будет эффективно блокировать этого конкретного пользователя, а не «разрешать» их. Вам нужно было бы отменить первое условие. ie. !^example.com$

Однако, настроен ли сервер для выполнения поиска имени хоста, не обязательно является проблемой самого LiteSpeed. Вероятно, это просто то, как настроен сервер. Многие общие хосты отключают эту функцию по соображениям производительности.


К сожалению, ваша проблема по-прежнему не решена в отношении чтения значения из внешнего файла .htaccess .

Вы можете сделать что-то вроде следующего, используя выражение Apache в Apache 2.4 , чтобы прочитать IP-адрес из внешнего файла и сравнить его с переменной REMOTE_ADDR сервера:

 RewriteCond expr "file('%{DOCUMENT_ROOT}/ip-address.txt') != %{REMOTE_ADDR}"
RewriteRule ^wp-login.php$ /blackhole.html [R,L]
  

Где ip-address.txt находится файл в корне документа, который содержит только IP-адрес (и не переводит строки).

ОДНАКО, к сожалению, на LiteSpeed это просто не работает. Он просто молча завершается сбоем (способ LiteSpeed).


В сторону:

Хотя вместо перенаправления на blackhole.html него было бы предпочтительнее просто использовать 404 или 403 Forbidden . Например:

 RewriteRule ^wp-login.php$ - [R=404]
  

Комментарии:

1. Спасибо за ваш ответ. Содержимое с правильным IP-адресом или без него в ip-address.txt похоже, он не читается, так как позволяет мне войти в систему в любом случае. (Файл содержит только одну строку, содержащую один IP-адрес…. Пробовали без / с CR после адреса). ip-address.txt находится в папке public_html. Эта кодировка также не работает на моем Apache 2.4.43 .htaccess. Какой модуль Apache требуется для вызова RewriteCond expr?