2015-02-04 5 views
1

В моем nginx domain.cong я написал следующие правила перезаписи ... , когда запрос попадает в основной домен (с или без www), он перенаправляет shoudl из субдомена блога, но это кажется неправильным ...nginx переписать правила из главного домена в поддомен

server { 
.... 
##### Rewrite rules for domain.tld => www.domain.tld ##### 
if ($host ~* ^([^.]+\.[^.]+)$) { 
    set $host_without_www $1; 
    rewrite ^(.*) $scheme://www.$host_without_www$1 permanent; 
} 

##### Rewrite rules for www.domain.tld => subdomain.domain.tld ##### 
if ($host ~* 'www\.[^.]+\.[^.]+$') { 
    set $host_without_www $1.$2; 
    rewrite ^(.*) $scheme://subdomain.$host_without_www$1 permanent; 
} 
... 
} 

Первое правило является правильным:
domain.tld => www.domain.tld
, но не второй один дает только
www.domain.tld => subdomain.
должен быть
www.domain.tld => subdomain.domain.tld

+0

у вас есть только один домен (например, domain.tld) ​​или много различных областей, которые должны быть перенаправлены на собственный субдомен? – SuddenHead

+0

У меня есть только один домен, но много разных поддоменов .. Я понимаю, что правила переписывания - это не лучший способ справиться с этим (даже если он работает нормально). Мне нужно перенаправить domain.tld на www.domain.tld и все subdomains.domain.tld в каталоги субдоменов – erwin

ответ

6

Ваша установка кажется немного сложной, и это не лучшая практика для $ host в "if". Если у вас есть только один домен, то это просто:

server { 
    # ... 
    server_name domain.tld www.domain.tld; 
    return 301 $scheme://subdomain.domain.tld$request_uri; 
} 

server { 
    server_name subdomain.domain.tld; 
    # ... 
} 

Если у вас есть много доменов, настройка аналогична, просто использовать регулярные выражения и захват переменных в server_name

+0

спасибо за ссылку ... Я изменю свои правила перезаписи ... – erwin

0

Я думаю, я нашел решение, модификации 2-й переписать правила:

##### Rewrite rules for www.domain.tld => subdomain.domain.tld ##### 
if ($host ~* www\.(.*)) { 
    set $host_without_www $1; 
    rewrite ^(.*)$ http://subdomain.$host_without_www$1 permanent; 
} 

, кажется, не будет работает нормально до тех пор

+0

все равно, это не рекомендуется. См. Http://nginx.org/en/docs/http/converting_rewrite_rules.html – SuddenHead

Смежные вопросы