Я пытаюсь написать правила перезаписи для блокировки URL-адресов с определенным шаблоном. Запросы следующие, как показано в журнале Apache.
"GET /mysecure/Docs?cb=20414624755 HTTP/1.1" 200 881107 "-" "Mozilla/5.0 (Windows NT 6.1; rv:53.0) Gecko/20100101 Firefox/53.0"
Я хочу заблокировать все запросы с помощью QUERY_STRING cb = 20414624755
.
Для этого я написал следующее правило
RewriteCond %{QUERY_STRING} "^cb=20414624755$" [nocase]
RewriteRule ^\/mysecure\/Docs$ - [forbidden,last]
Но запросы не блокируются. В доступе apache log, я вижу 200 Код ответа
для запросов с этими шаблонами.
Пожалуйста, предложите.
RewriteCond% {QUERY_STRING} "^ cb = 20414624755 $" [нет случая] RewriteRule ^ \ / mysecure \ / Docs $ - [запрещено, последний]
Эти директивы будут соответствовать заявленному запросу, если они используются непосредственно в конфигурации сервера (или виртуального хоста). Однако шаблон RewriteRule
не будет соответствовать URL-пути, если он используется в каталоге или .htaccess
контексте (который я могу только предположить, где они используются в этом случае?).
При использовании в файле .htaccess
префикс каталога (где находится файл .htaccess
) сначала удаляется из URL-пути, соответствующего шаблону RewriteRule
. Префикс каталога всегда заканчивается косой чертой, поэтому соответствующий URL-путь никогда не начинается с косой черты.
Чтобы это работало как в контексте сервера, так и в контексте каталога, вы можете сделать предыдущую косую черту необязательной:
RewriteCond %{QUERY_STRING} ^cb=20414624755$ [NC]
RewriteRule ^/?mysecure/Docs$ - [F]
Нет нужно избегать косой черты в регулярном выражении. Я использовал сокращенные флаги , поскольку они гораздо более распространены в использовании. L
( последний
) не требуется при использовании с F
( запрещено
) - это подразумевается. Кавычки вокруг CondPattern здесь не требуются.