captures in regex location

Vladimir Sopot jd at artdesign.ru
Thu Mar 5 17:22:43 MSK 2009


Увы,

2009/03/05 16:54:16 [error] 18720#0: *5440 open() "/wwwroot/site///e/ 
ea/0/12720.jpg" failed (2: No such file or directory),
client: 94.188.35.148, server: ~^(s)(\d)\.site, request: "GET /e/ea/ 
0/12720.jpg HTTP/1.1", host: "s0.site", referrer:
  "http://site/ea/12720.html"

Тоесть сервер точно матчится, но вот $1-2 не устанавливаются :(

Куда бы еще копнуть? Уж больно хочется и конфиг порезать и на  
регекспах сэкономить :)

# uname -a
Linux site 2.6.27.7-9-default #1 SMP 2008-12-04 18:10:04 +0100 x86_64  
x86_64 x86_64 GNU/Linux

# ./configure \
     --with-http_stub_status_module \
     --without-mail_pop3_module \
     --without-mail_imap_module \
     --without-mail_smtp_module \
     --without-http_access_module \
     --without-http_autoindex_module \
     --without-http_browser_module \
     --without-http_charset_module \
     --without-http_limit_zone_module \
     --without-http_map_module \
     --without-http_memcached_module \
     --without-http_referer_module \
     --without-http_ssi_module \
     --without-http_userid_module \
     --without-http_proxy_module \
     --without-http_proxy_module
...........
checking for PCRE library ... found
...........
Configuration summary
   + using system PCRE library
...........
# pcre-config --version
7.8

On Mar 5, 2009, at 4:14 PM, Igor Sysoev wrote:

> On Thu, Mar 05, 2009 at 03:46:55PM +0300, Vladimir Sopot wrote:
>
>> Помимо описанного сервера есть еще секции
>>
>> server {
>>        server_name ~^([b|o])(\d)\.site;
>> 	.......
>> 	}
>>
>> server {
>>        listen *:80 default bind sndbuf=64k;
>>        server_name site
>> 	..........
>> 	}
>>
>> и добавление пустого сервера не исправило ситуацию.
>
> У меня для
>
>    server {
>        listen  8000;
>        server_name ~^([b|o])(\d)z\.site;
>
>        root    /wwwroot/site/$1/$2/;
>    }
>
> в логах такая ошибка:
>
> [error] 58504#0: *1 open() "/wwwroot/site/b/1/dir/index.html" failed  
> (2: No such file or directory), client: 127.0.0.1, server: ~^([b|o]) 
> (\d)z\.site, request: "GET /dir/index.html HTTP/1.0", host: "b1z.site"
>
> То есть, путь "/wwwroot/site/b/1/dir/index.html" формиурется  
> правильно.
>
> Кстати, "|" в "([b|o])" - лишняя.
>
>> On Mar 5, 2009, at 2:43 PM, Igor Sysoev wrote:
>>
>>> On Thu, Mar 05, 2009 at 01:57:49PM +0300, Vladimir Sopot wrote:
>>>
>>>> Спасибо, но что-то оно не того
>>>>
>>>>  server {
>>>>      server_name ~^([b|o])(\d)z\.site;
>>>>
>>>> #        if ($host ~* (.)(\d)) {
>>>>          set $store_type $1;
>>>>          set $store_id $2;
>>>> #            }
>>>>
>>>>      root    /wwwroot/site/$store_id/$store_type/;
>>>>      }
>>>>
>>>> В таком виде не работает (404), если убрать комментарии - все
>>>> становится на свои места. Забрать root внутрь location / { } тоже
>>>> ничего не дает. root  /wwwroot/site/$2/$1/ тоже не работает
>>>
>>> Скорее всего, regex вообще не исполняется, потому что сервер один -
>>> проверять нечего. Нужно добавить пустой сервер, чтобы nginx начал
>>> проверять
>>> server_name:
>>>
>>>     server { server_name _; }
>>>
>>>> On Mar 5, 2009, at 1:17 PM, Igor Sysoev wrote:
>>>>
>>>>> On Thu, Mar 05, 2009 at 12:14:55PM +0200, Andrew Sitnikov wrote:
>>>>>
>>>>>>>> А можно такое же ещё и для server_name?
>>>>>> IS> Новый патч с поддержкой server_name.
>>>>>> можно пример ?
>>>>>
>>>>> Наверное, как-то так:
>>>>>
>>>>> server {
>>>>>     listen  8000;
>>>>>     server_name  ~^(?:www\.)?(.+)$;
>>>>>
>>>>>     location / {
>>>>>         root   /path/to/$1;
>>>>>     }
>>>>> }
>>>>>
>>>>>
>>>>> -- 
>>>>> Игорь Сысоев
>>>>> http://sysoev.ru
>>>>>
>>>>>
>>>>
>>>
>>> -- 
>>> Игорь Сысоев
>>> http://sysoev.ru
>>>
>>>
>>
>
> -- 
> Игорь Сысоев
> http://sysoev.ru
>
>






More information about the nginx-ru mailing list