map & rewrite
Maxim Dounin
mdounin на mdounin.ru
Ср Ноя 18 18:03:46 UTC 2015
Hello!
On Wed, Nov 18, 2015 at 07:17:30AM -0500, den68 wrote:
> Доброго время суток, не получается следующая схема:
>
> nginx.conf:
>
> map $args$query_string $admvasya {
> default 0;
> ~do=vasya$ 1;
> ~do=vasya\b.*$ 1;
> ~do=vasya*.*$ 1;
> ~\b.*do=vasya$ 1;
> ~\b.*do=vasya\b.*$ 1;
> ~\b.*do=vasya*.*$ 1;
> ~\b.*\bdo=vasya$ 1;
> ~\b.*\bdo=vasya\b.*$ 1;
> ~\b.*\bdo=vasya*.*$ 1;
> ~do=vasya 1;
> do=vasya 1;
> }
>
> virt_host.conf:
>
> if ($admvasya = 1) {
> rewrite ^/home/(.*)$ /home/admvasya_go_home.php?do=petya&other=87654
> last;
> }
>
> проверял в $args и $query_string искомые поля присутствуют.
> в мапе изложены все варианты пришедшие на ум из темы регекспов...
Возможно, следует начать с того, что именно вы хотите получить и
что именно получаете вместо этого.
Из очевидных проблем:
- $args и $query_string - синонимы, и соответственно при запроса
вида "/home/foo?do=vasya" проверятся будет строка вида "do=vasyado=vasya";
- практически все строки в map'е - бесполезны чуть более, чем
полностью, особенно в свете наличия "~do-vasya";
- если rewrite используется флаг "last", т.е. после срабатывания
rewrite'а будет заново искаться совпадение URI и location, и
если запрос снова попадёт в тот же location - будет цикл и
ошибка "rewrite or internal redirection cycle..." в логах.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru