2013-03-07 9 views
11

Używając nginx, chcę przekierować wszystkie poddomeny z example.com na www.example.com.nginx przepisanie wszystkich subdomen z ukrytymi znakami na www.site.com

Widziałem przekierowania tutaj, aby przekierować stronę inną niż www lub vice versa, ale chcę też przekierować www2.site.com blabla.site.com. Mam dns z symbolem wieloznacznym dla domeny.

dla Apache można to zrobić łatwo z następujących powodów:

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

Poniższa wydają się działać, ale nie jest to zalecane według ifisevil page.

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

Odpowiedz

19

Najlepszym sposobem, aby to zrobić w nginx jest kombinacją dwóch bloków serwerowych:

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 
} 

ja testowałem to na moim laptopie, ponieważ zgłoszone nie działa. Pojawia się następujący rezultat lokalnie (po dodaniu www2.test.localhost i www.test.localhost do mojego /etc/hosts wraz z config bit nginx i przeładunku 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/ 

Więc tak, to na pewno działa.

+2

Proszę, nie używaj 'przepisać^permanent' zamiast prostego' return'. Wykonywanie wyrażenia regularnego (nawet tak prostego '^') po prostu marnuje procesor w tym przypadku. – VBart

+0

dobry punkt, zmieniono, że – cobaco

+0

próbowałem tego, to nie działa, nie wysyła nagłówka 301, nie przekierowuje do strony www.site.com, faktycznie przekierowuje do innej witryny na serwerze, ale leaver subdomain.site.com w adress barze – user2143308

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

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

Referencje:

+0

próbowałem tego, to nie działa, nie wysyła nagłówka 301, ani nie przekierowuje do strony www.site.com, faktycznie przekierowuje do innej witryny na serwerze, ale pozostawia subdomain.site.com w pasku adresu – user2143308

+0

problem jest może to "site.com" nie pasuje do '* .site.com' (nie kropka). – regilero

+2

próbowałem .site.com, która przechwytuje zarówno * .site.com i site.com zgodnie z instrukcją – user2143308