Re[3]: Проблема с rewrite

andrey at mail.anti-aging-drugs.com andrey at mail.anti-aging-drugs.com
Wed Aug 30 17:45:49 MSD 2006


Все работает отлично, кроме: нужно, чтоб домены вида www.example.ws и
example.ws смотрели в папку 1, а все остальные поддомены
*.example.ws смотрели в папку 2

Пробую делать это с помощью проверки хоста регулярным выражением, но
не получается

if ($host ~* ^[^w][^w][^w][a-zA-Z0-9-]+(\.example\.ws)$) {
         set $add_path /ub;
}

Пробовал исключение делать и так (с тем же рез-м):

^(?<!www)([a-zA-Z0-9-])+(\.example\.ws)$
^(?!www)([a-zA-Z0-9-])+(\.example\.ws)$

Вариант с двумя серверами также не прокатил. Получается, что у шаблона
приоритет выше, чем у конкретно заданного значения?

         server {
                 listen       81;
                 server_name  www.example.ws example.ws;
                 location / {
                         root   /home/example/data/public_html;
                         index  index.html index.htm;
                 }
         }

         server {
                 listen       81;
                 server_name  zzz.example.ws *.example.ws;
                 location / {
                         root
                         /home/example/data/public_html/additional/;
                         index  index.html index.htm;
                 }
         }

> On Tue, 29 Aug 2006 andrey at mail.anti-aging-drugs.com wrote:

>> Спасибо за идею с двумя серверами. Очень понравилось во всех
>> отношениях.
>>
>> Такой вариант сработает так, как ожидается?
>>
>>         server {
>>                 listen       81;
>>                 server_name  www.example.ws example.ws;
>>                 location / {
>>                         root   /home/example/data/public_html;
>>                         index  index.html index.htm;
>>                 }
>>         }
>>
>>         server {
>>                 listen       81;
>>                 server_name  *.example.ws;
>>                 location / {
>>                         alias  /users/;
>>                         index  index.html index.htm;
>>                 }
>>         }

> В смысле разделения www.example.ws, example.ws и *.example.ws ?
> Да, сработает, только во второй сервер нужно перед *.example.ws поставить
> какое-нибудь имя без *, например, localhost.example.ws.

>>> On Tue, 29 Aug 2006, Andrey Kravchenko wrote:
>>
>>>> Задача: нужно перенаправить все запросы с доменов вида XXX.example.ws
>>>> в конкретную папку.
>>>>
>>>> Делаю таким конфигом:
>>>>
>>>>        server {
>>>>                error_log  logs/example_error.log  debug;
>>>>                listen       81;
>>>>                server_name  example.ws *.example.ws;
>>>>                location / {
>>>>                        root   /home/example/data/public_html;
>>>>                        index  index.html index.htm;
>>>>                }
>>>>
>>>>                if ($host ~* .+\.example\.ws) {
>>>>                        rewrite ^(.*)$ /users$1 break;
>>>>                }
>>>>
>>>>        }
>>>>
>>>> При запросе на http://example.ws:81/ все работает.
>>>>
>>>> При запросах вида http://XXX.example.ws:81/ получаю 404 ошибку с таким
>>>> логом:
>>>>
>>>> 2006/08/29 19:09:19 [error] 44111#0: *4669382 open()
>>>> "/home/example/data/public_html/users/users/inde
>>>> x.htm" failed (2: No such file or directory), client:
>>>> 195.234.72.66, server: example.ws, URL: "/", ho
>>>> st: "qweqwee.example.ws:81"
>>>>
>>>> Замена break на last никак не влияет, а других проблемных мест не
>>>> нахожу. Куда смотреть?
>>>>
>>>> P.S. nginx/0.3.51
>>
>>> Так как "if rewrite" описан на уровне сервера и запрос для
>>> XXX.example.ws:81/ обрабатывается так:
>>
>>> 1) uri переписывается в /users/.
>>> 2) затем запрос попадает в "location /"
>>> 3) после этого перебираются индексы.
>>
>>> Нужно, if поставить внутрь "location /" и описать для него нужный root.
>>
>>> А вообще, я бы такую задачу решил бы двумя серверами:
>>
>>>          server {
>>>                  listen       81;
>>>                  server_name  example.ws;
>>>                  location / {
>>>                          root   /home/example/data/public_html;
>>>                          index  index.html index.htm;
>>>                  }
>>>          }
>>
>>>          server {
>>>                  listen       81;
>>>                  server_name  www.example.ws *.example.ws;
>>>                  location / {
>>>                          alias  /users/;
>>>                          index  index.html index.htm;
>>>                  }
>>>          }
>>
>>
>>
>>> Игорь Сысоев
>>> http://sysoev.ru
>>
>>
>>
>> -- 
>> С уважением,
>> noreply                         
>> mailto:noreply at mail.anti-aging-drugs.com
>>
>>
>>
>>
>>

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



-- 
С уважением,
 noreply                          mailto:noreply at mail.anti-aging-drugs.com






More information about the nginx-ru mailing list