Отладка регулярных выражений в apache. RewriteRule, RewriteCond

govnoproger.ru > интернет > Отладка регулярных выражений в apache. RewriteRule, RewriteCond

Представьте ситуацию. Вы сделали какое-то юрл преобразование, а оно не работает.
Либо же оно частично не работает, либо оно работает, но вы не можете этого понять.

Чтобы отлаживать правила юрл преобразований нужен хостинг, в котором доступен файл httpd.conf .

Если у вас его нету используйте denwer.

В этот файл вам нужно добавить пару строк:

rewritelog "C:\WebServers\usr\local\apache\logs\rewrite.log"
RewriteLogLevel 9

Первая строка это путь к логу. Вторая строка это уровень отладки. 9 — самый глубокий.
Отладку надо включать только для отлаживания, нельзя оставлять её включенной просто так.
Она потребляет слишком много ресурсов.

Далее я приведу лог отладки:

127.0.0.1 - - [04/Oct/2011:17:15:23 +0400] [tools.hello/sid#12257d8][rid#271ff80/initial] (1) [perdir K:/home/hello/tools/uploads/n/] pass through K:/home/hello/tools/uploads/n/out_6+.jpg
127.0.0.1 - - [04/Oct/2011:17:18:56 +0400] [tools.hello/sid#12257d8][rid#76f5050/initial] (3) [perdir K:/home/hello/tools/] strip per-dir prefix: K:/home/hello/tools/uploads/n/out_6+.jpg -> uploads/n/out_6+.jpg
127.0.0.1 - - [04/Oct/2011:17:18:56 +0400] [tools.hello/sid#12257d8][rid#76f5050/initial] (3) [perdir K:/home/hello/tools/] applying pattern '^index\.php$' to uri 'uploads/n/out_6+.jpg'
127.0.0.1 - - [04/Oct/2011:17:18:56 +0400] [tools.hello/sid#12257d8][rid#76f5050/initial] (3) [perdir K:/home/hello/tools/] strip per-dir prefix: K:/home/hello/tools/uploads/n/out_6+.jpg -> uploads/n/out_6+.jpg
127.0.0.1 - - [04/Oct/2011:17:18:56 +0400] [tools.hello/sid#12257d8][rid#76f5050/initial] (3) [perdir K:/home/hello/tools/] applying pattern '.' to uri 'uploads/n/out_6+.jpg'
127.0.0.1 - - [04/Oct/2011:17:18:56 +0400] [tools.hello/sid#12257d8][rid#76f5050/initial] (4) [perdir K:/home/hello/tools/] RewriteCond: input='/uploads/n/out_6+.jpg' pattern='!^/stats.*$' [NC] => matched
127.0.0.1 - - [04/Oct/2011:17:18:56 +0400] [tools.hello/sid#12257d8][rid#76f5050/initial] (4) [perdir K:/home/hello/tools/] RewriteCond: input='K:/home/hello/tools/uploads/n/out_6+.jpg' pattern='!-f' => not-matched
127.0.0.1 - - [04/Oct/2011:17:18:56 +0400] [tools.hello/sid#12257d8][rid#76f5050/initial] (3) [perdir K:/home/hello/tools/] strip per-dir prefix: K:/home/hello/tools/uploads/n/out_6+.jpg -> uploads/n/out_6+.jpg
127.0.0.1 - - [04/Oct/2011:17:18:56 +0400] [tools.hello/sid#12257d8][rid#76f5050/initial] (3) [perdir K:/home/hello/tools/] applying pattern '(.+\.(jpe?g|gif|png))$' to uri 'uploads/n/out_6+.jpg'
127.0.0.1 - - [04/Oct/2011:17:18:56 +0400] [tools.hello/sid#12257d8][rid#76f5050/initial] (4) [perdir K:/home/hello/tools/] RewriteCond: input='K:/home/hello/tools/uploads/n/out_6+.jpg' pattern='!^(.+)-\d+x\d+\.(jpe?g|gif|png)' [NC] => matched
127.0.0.1 - - [04/Oct/2011:17:18:56 +0400] [tools.hello/sid#12257d8][rid#76f5050/initial] (2) [perdir K:/home/hello/tools/] rewrite 'uploads/n/out_6+.jpg' -> '../../imageview.php?fname=uploads/n/out_6+.jpg'

Вот слова которые нужно запомнить:
applying pattern — применяется регулярное выражение. Для правил типа точка и тп.
matched — совпало (регулярное выражение)
not-matched — не совпало
strip per-dir prefix — урезаем путь директории (basedir)
trying to replace prefix — пытаемся сметь префикс
Остальные слова понятны типа rewrite, rewriteCond и тп.

В целом инструмент бывает редко полезен, хотя имеет место быть.

Рекомендую:

12.11.2011 | последняя редакция: 12.11.2011 |