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

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


Здравствуйте, andrey.

Упс, прошу прощения.

С двумя серверами, кажется, получилось.

> Все работает отлично, кроме: нужно, чтоб домены вида 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