Re: не все локешены получают зачение из регулярки сервера

Peter Leonov gojpeg at gmail.com
Wed Sep 9 19:35:31 MSD 2009


On 09.09.2009, at 17:15, Maxim Dounin wrote:

> Hello!
>
> On Wed, Sep 09, 2009 at 04:40:46PM +0400, Peter Leonov wrote:
>
>> При таком конфиге
>>
>> server
>> {
>>>>  server_name ~^([A-Za-z\-\.]+)\.retailstars\.ru$;
>>
>>  set $city $1;
>>  location /db { root /www/life/new.retailstars.ru/$city; }
>>  location /index { root /www/life/new.retailstars.ru/$city; }
>>  location /form { root /www/life/new.retailstars.ru/$city; }
>>>> }
>>
>> Переменная $city определена только в / 
>> index, для остальных локейшенов
>> это пустая строка.
>> Отказ от временной переменной $city и  
>> использование $1 не помогает.
>
> Если при обработки запроса случяется  
> матчинг любого регулярного
> выражения (e.g. location заданный  
> регулярным выражением),
Понимаю это.
Регуляркой задан только сервер (я  
регулярки, вообще, не очень-то люблю).

> а потом
> - внутренний редирект,
Точно! Есть включения через SSI.
Локейшен /index срабатывает напряму, а  
остальные инклюдятся в его реквест  
через SSI-фильтр. Наверняка, не хватает  
пары строчечек в конструкторе  
реквестов. Или регулярки в SSI  
конфликтуют с регулярками из конфига.

> то конструкция
>
>    server_name ~^(...);
>    set $blah $1;
>
> работать не будет.  Ибо матчинга  
> server_name заново не случится, а
> set $blah $1 - произойдёт и использует $1 из  
> результатов последнего
> регулярного выражения.
То есть set — это такое же императивное  
зло, как и if/rewrite? ;)

>
> Коротко резюмируя - если в конфиге  
> есть "...", то так делать
> нельзя.
Да, многоточия меня тоже смутили бы.

Пока откачусь на конфиг с копипастом.
Спасибо за подсказку, Максим. Попробую  
ночерком разобраться по дебаг-логу :)

>
> Maxim Dounin
>
> p.s. Please do not hijack unrelated threads.
>

С уважением,
Петр Леонов.
+7 (905) 758-12-73



More information about the nginx-ru mailing list