Я целую вечность пытался заставить это работать, и я не могу понять это. Я пытаюсь заблокировать доступ к сайту из ряда стран на основе заголовка CF-IPCountry, добавленного CloudFlare. Я подумал, что htaccess - подходящий способ сделать это.
Мы запускаем LiteSpeed 4.2.4 поверх DirectAdmin для панели управления.
Проблема в том, что правило htaccess ничего не делает.
Вот правило, которое мы пробовали:
SetEnvIf CF-IPCountry AU UnwantedCountry=1
Order allow,deny
Deny from env=UnwantedCountry
Allow from all
Это вообще не имеет значения, соединения все равно принимаются. Чтобы проверить, что правило хотя бы обрабатывается, я изменил Разрешить со всех на Запретить со всех, и в соединениях было отказано. Таким образом, это проблема с переменной.
Вот соответствующие заголовки, которые входят в запрос.
Connection: Keep-Alive
Accept-Encoding: gzip
CF-Connecting-IP: xx.xx.xx.xx
CF-IPCountry: AU
X-Forwarded-For: xx.xx.xx.xx.xx
CF-RAY: c9062956e2d04b6
X-Forwarded-Proto: http
CF-Visitor: {"scheme":"http"}
Zone-Name: xx.com.au
Надеюсь, кто-нибудь сможет мне помочь, это слишком долго сводило меня с ума.
Спасибо
Обновить
Теперь я включил перезапись журнала, добавив RewriteLogLevel 9 к виртуальному хосту.
Первоначально я провел тест со всеми моими другими правилами htaccess, которые довольно обширны для этого сайта, я мог видеть, что различные совпадения регистрируются, поэтому я знаю, что ведение журнала работает правильно.
Я разделил свой htaccess до костей, чтобы проверить этот случай, поэтому в моем htaccess было следующее:
SetEnvIf CF-IPCountry AU UnwantedCountry=1
Order allow,deny
Deny from env=UnwantedCountry
Allow from all
Благодаря этому в моем htaccess вообще нет вывода журнала, что говорит мне, что он просто не соответствует правилам, которые я предполагаю. Я еще раз проверил, что в заголовках присутствует «CF-IPCountry: AU».
В качестве альтернативы использованию SetEnvIf
вы могли бы сделать это с RewriteRule
также.
RewriteCond %{HTTP:CF-IPCountry} ^(AU|SE)$
RewriteRule ^ - [F,L]
Это заблокировало бы пользователей AU и SE.