server_name & location captures

Sergey Skvortsov skv at protey.ru
Wed Oct 21 20:00:29 MSD 2009


On 21.10.2009 19:32, Igor Sysoev wrote:
> On Wed, Oct 21, 2009 at 07:04:58PM +0400, Sergey Skvortsov wrote:
> 
>> On 21.10.2009 18:17, Igor Sysoev wrote:
>>> Есть идея для выделений в server_name и location использовать специальные
>>> имена %N и @N:
>>>
>>>   server {
>>>      server_name ~^(\w+)\.intrasearch\.(.+)$;
>>>      root   /usr/local/www/intrasearch-dev/%1;
>>>
>>>   location ~ ^/~user(/[^/]+)(.+)$ {
>>>      alias  /homes/@1/public_html at 2;
>> А почему бы не использовать named captures? Которые есть в свежих
>> версиях PCRE.
>>
>> Т.е. named capture вида (?<foobar>) сделать доступным через переменную
>> вида $regex_foobar (или каноничным $+{foobar}).
>>
>> Скажем:
>>
>>   server {
>>      server_name ~^(?<host_prefix>\w+)\.intrasearch\.(.+)$;
>>      root   /usr/local/www/intrasearch-dev/$regex_host_prefix;
>>
>>   location ~ ^/~user(?<username>/[^/]+)(?<rest>.+)$ {
>>      alias  /homes/$regex_username/public_html$regex_rest;
> 
> Хотя моё чувство прекрасного немного протестует против (?<foobar>),
> а особенно против $+{foobar}, но вариант $regex_foobar мне нравится.
> 
> А в каком PCRE это появилось, не помнишь ?

http://www.pcre.org/changelog.txt

Собственно в 7.0 (19-Dec-06) была добавлена поддержка в виде
аналогичному Perl 5.10 - т.е. (?<name>...) или (?'name'...), в
дополнение к python-варианту (?P<name>...). Первые два варианта
поддерживаются и в .NET.

Вот ещё:
http://www.regular-expressions.info/named.html

-- 
Sergey Skvortsov
mailto: skv at protey.ru





More information about the nginx-ru mailing list