2013-03-07 3 views
11

Используя nginx, я хочу перенаправить все поддомены от example.com до www.example.com.nginx переписать все поддомены подстановок на www.site.com

Я видел перенаправления здесь, чтобы перенаправить не-www на www или наоборот, но я также хочу, чтобы www2.site.com blabla.site.com был перенаправлен. У меня есть wildcard dns для домена.

Для апача это можно легко сделать с следующее:

RewriteCond %{HTTP_HOST} !www.example.com [NC] 
RewriteRule (.*) http://www.example.com%{REQUEST_URI} [R=301,L] 

Ниже, кажется, работает, но не рекомендуется в соответствии с ifisevil page.

if ($http_host !~ "www.site.com"){ 
    rewrite ^(.*)$ http://www.example.com$request_uri redirect; 
} 

ответ

19

Лучший способ сделать это в Nginx является комбинацией двух блоков сервера:

server { 
    server_name *.example.org; 
    return 301 $scheme://example.org$request_uri; 
} 

server { 
    server_name www.example.org; 

    #add in further directives to serve your content 
} 

Я испытал это на моем ноутбуке, так как вы сообщили, что не работает. Я получаю следующий результат локально (после добавления www2.test.localhost и www.test.localhost к моему /etc/hosts, вместе с битом конфигурации Nginx, и перегрузка Nginx):

$ curl --head www2.test.localhost 
HTTP/1.1 301 Moved Permanently 
Server: nginx/1.2.6 
Date: Thu, 07 Mar 2013 12:29:32 GMT 
Content-Type: text/html 
Content-Length: 184 
Connection: keep-alive 
Location: http://www.test.localhost/ 

Так что да, это определенно работает.

+2

Пожалуйста, не используйте 'переписывающие^permanent' вместо простого' return'. Выполнение регулярного выражения (пусть даже простого простого '^') является просто потерей CPU в этом случае. – VBart

+0

Хорошая точка, изменилось, что – cobaco

+0

попробовал это, он не работает, не отправляет 301 заголовок, не перенаправляет его на сайт www.site.com, фактически перенаправляет его на другой сайт на сервере, но выдает subdomain.site.com в adessbar – user2143308

13
server { 
    server_name .example.com; 
    return 301 http://www.example.com$request_uri; 
} 

server { 
    server_name www.example.com; 
    [...] 
} 

Ссылки:

+0

попробовал это, он не работает, не отправляет 301-й заголовок и не перенаправляет его на сайт www.site.com. Фактически он перенаправляет на другой сайт на сервере, но оставляет subdomain.site.com в adessbar – user2143308

+0

проблема возможно, что 'site.com' не соответствует' * .site.com' (а не точка). – regilero

+2

Я попробовал .site.com, который ловит оба * .site.com и site.com в соответствии с руководством – user2143308

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