Re: nginx + rewrite (нужно упростить)

Sergey Shepelev temotor на gmail.com
Пн Дек 21 20:12:43 MSK 2009


2009/12/21 grin <nginx-forum at nginx.us>:
> Всем привет,
>
> помогите упростить 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 переменных в правиле, т.е. если добавиться еще переменная, ничего не будет работать.
>
> спасибо.

Я могу ошибаться, но регекспами такая задача не решается.

Вам нужно заменять (:(s|b|p|c)(\d+))+ на &$n=$(n+1), но проблема в
том, что регекспы "не умеют считать".
Либо рекурсивно заменять :(s|b|p|c)(\d+) на &$1=$2, но регекспы не
умеют перезапускаться.

proxy_pass на микроскрипт, отдающий X-Accel-Redirect поможет сделать
любые странные замены.

>
> Posted at Nginx Forum: http://forum.nginx.org/read.php?21,32466,32466#msg-32466
>
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://nginx.org/mailman/listinfo/nginx-ru
>


Подробная информация о списке рассылки nginx-ru