Использование Mod_redirect QUERY_STRING для блокировки URL-адресов

Я пытаюсь написать правила перезаписи для блокировки 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 Код ответа для запросов с этими шаблонами.

Пожалуйста, предложите.

0
задан 2 June 2017 в 12:48
1 ответ
 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 здесь не требуются.

1
ответ дан 4 December 2019 в 16:14

Теги

Похожие вопросы