RewriteCond %{HTTP_USER_AGENT} Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu HeadlessChrome HeadlessChrome Safari/537.36
Пробелы являются разделителями в конфигурационных файлах Apache. Таким образом, вы, вероятно, получили ошибку о недопустимых флагах (если вы проверите журнал ошибок - браузер, скорее всего, просто сообщит об ошибке 500). Вы должны либо использовать обратную косую черту, чтобы избежать пробелов в строке user-agent, или заключить весь user-agent (т. Е. CondPattern - 2-й аргумент в директиву RewriteCond
) в двойные кавычки. Также обратите внимание, что по умолчанию это регулярное выражение, поэтому любые специальные символы / мета регулярные выражения также необходимо экранировать (включая .
, (
и )
).
Например, попробуйте следующее:
RewriteCond %{HTTP_USER_AGENT} "^Mozilla/5\.0 \(X11; Linux x86_64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Ubuntu HeadlessChrome HeadlessChrome Safari/537\.36$"
RewriteRule .* - [F]
Это вернет 403 Запрещено вместо 503 Служба недоступна (что на самом деле является временным состоянием).
В качестве альтернативы, для выполнения лексикографического сравнения строк (точное совпадение) вместо регулярного выражения можно использовать префиксный оператор =
в CondPattern . Например:
RewriteCond %{HTTP_USER_AGENT} "=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu HeadlessChrome HeadlessChrome Safari/537.36"
CondPattern теперь обрабатывается как обычная строка (не регулярное выражение), поэтому нет необходимости экранировать специальные символы.
Само собой разумеется, это должно идти вверху вашего .htaccess
файла - вместе с любыми другими директивами блокировки.
UPDATE:
Если директивы mod_rewrite переопределяются (возможно, из файла .htaccess
в подкаталоге), тогда вы можете использовать комбинацию mod_setenvif и mod_authz_core (Apache 2.4+), что-то вроде:
BrowserMatch "^Mozilla/5\.0 \(X11; Linux x86_64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Ubuntu HeadlessChrome HeadlessChrome Safari/537\.36$" block_it
<RequireAll>
Require all granted
Require not env block_it
</RequireAll>
Как отмечалось выше, это синтаксис Apache 2.4+.