#.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?