Страницы

четверг, 13 сентября 2012 г.

mod_rewrite + mod_proxy Apache 2.2 и обработка параметра в адресной строке

Задача

Обработать нужные параметр в адресной строке. Конкретно - выдать forbidden при использовании определённого параметра:
http://example.com/?foo=bar - forbdden

Проблема

Во-первых, оказалось, что команда mod_proxy PxoxyPassMatch не обрабатывает параметры в строке, т.е. такое не прокатит:
ProxyPassMatch foo=bar !
Во-вторых, использование правила mod_rewrite тоже не сработало:
RewriteEngine On
RewriteCond %{QUERY_STRING} foo=bar
RewriteRule ^.*$  - [F,P]
Точнее, оно работает, если нет других правил в mod_proxy, но они были, и вначале обрабатывались они. Казалось бы параметр [P] должен был заставить воспринимать rewrite как proxy, и просто записать это правило выше, но ничего подобного.

Решение

Rewrite правило, записанное выше, надо было просто поместить в <Location /></Location> и mod_rewrite стал срабатывать первым. На официальном сайте об этом ни слова, более того, там написано это:
The rewrite engine may be used in .htaccess files and in <Directory> sections, with some additional complexity.
Although rewrite rules are syntactically permitted in <Location> and <Files> sections, this should never be necessary and is unsupported.
В интернетах пишут, что mod_rewrite должен первым срабатывать, но такого не произошло, поместив правила в <Directory>   (они кста и без включения в него работают норм по себе).