Re: Регулярное выражение в server_name и редирект

Igor Sysoev igor на sysoev.ru
Вт Сен 20 14:52:29 UTC 2011


On Tue, Sep 20, 2011 at 06:27:42PM +0400, Вадим Бородин wrote:
> Здравствуйте.
> 
> Есть такой конфиг:
> 
> server {
>     listen 80;
>     server_name
> ~^(www\.)?mysite\.ru(\.(?<lc>[^.]+)\.(?<cluster>[^.]+)\.mypartysite\.name)?$;
>     if ($lc = "") {
>         set $lc rel;
>     }
>     if ($cluster = "") {
>         set $cluster prod;
>     }
>     root   /srv/$cluster/$lc/mysite/htdocs;
>         index  index.php
>     location ~ \.php$ {
>         # отдаётся на fastcgi php
>     }
> }
> 
> В /srv/prod/rel/mysite/htdocs есть директория static.
> 
> Заходим на http://mysite.ru/static/ - получаем 403 (это правильно,
> autoindex'а нет)
> Заходим на http://mysite.ru/static  - (без слеша на конце) получаем редирект
> на http://~
> ^(www\.)?mysite\.ru(\.(?<lc>[^.]+)\.(?<cluster>[^.]+)\.mypartysite\.name)?$/
> static/
> Т.е. редирект на само регулярное выражение из server_name с дописанным в
> начало http:// и дописанным в конец /static/.
> 
> Подскажите, пожалуйста, что происходит.

Вместо if'ов лучше поставить:

http {

    map  $lc_r    $lc  {
         ""       rel;
         default  $lcc;
    }

    map  $cluster_r    $cluster  {
         ""      prod;
         default  $cluster;
    }

    server {
     server_name
 ~^(www\.)?mysite\.ru(\.(?<LC_R>[^.]+)\.(?<CLUSTER_R>[^.]+)\.mypartysite\.name)?$;

А для нормального редиректа
   server_name_in_redirect off;


-- 
Игорь Сысоев
http://sysoev.ru



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