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