Re[2]: nginx + rewrite (нужно упростить)
Sergey Bondari
bondari на aspiresoft.com
Ср Дек 23 13:37:03 MSK 2009
>> Всем привет,
>>
>> помогите упростить rewrite правила для nginx
>>
>>
>> rewrite "^/(.+?)/:(s|b|p|c)([0-9]+)$" "/index.php?op=sections&act=show&$2=$3" last;
>> rewrite "^/(.+?)/:(s|b|p|c)([0-9]+):(s|b|p|c)([0-9]+)$" "/index.php?op=sections&act=show&$2=$3&$4=$5" last;
>> rewrite "^/(.+?)/:(s|b|p|c)([0-9]+):(s|b|p|c)([0-9]+):(s|b|p|c)([0-9]+)$" "/index.php?op=sections&act=show&$2=$3&$4=$5&$6=$7" last;
>> rewrite "^/(.+?)/:(s|b|p|c)([0-9]+):(s|b|p|c)([0-9]+):(s|b|p|c)([0-9]+):(s|b|p|c)([0-9]+)$" "/index.php?op=sections&act=show&$2=$3&$4=$5&$6=$7&$8=$9" last;
>>
>>
>> одной регуляркой это можно сделать? еще проблема, максимум может быть 9 переменных в правиле, т.е. если добавиться еще переменная, ничего не будет работать.
>>
>> спасибо.
SS> Я могу ошибаться, но регекспами такая задача не решается.
Вообще-то в теории-то цампутер сайенс конечно никак (конечные
автоматы, нету стека и все такое), но на практике в PCRE они расширены
http://www.php.net/manual/en/regexp.reference.recursive.php
SS> Вам нужно заменять (:(s|b|p|c)(\d+))+ на &$n=$(n+1), но проблема в
SS> том, что регекспы "не умеют считать".
SS> Либо рекурсивно заменять :(s|b|p|c)(\d+) на &$1=$2, но регекспы не
SS> умеют перезапускаться.
SS> proxy_pass на микроскрипт, отдающий X-Accel-Redirect поможет сделать
SS> любые странные замены.
--
Best regards,
Sergey
Подробная информация о списке рассылки nginx-ru