2013-03-07 14 views
11

Utilizzando nginx, voglio reindirizzare tutti i sottodomini di example.com a www.example.com.nginx riscrive tutti i sottodomini wildcard su www.site.com

Ho visto i reindirizzamenti qui per reindirizzare non www a www o viceversa, ma voglio anche reindirizzare www2.site.com blabla.site.com. Ho un DNS jolly per il dominio.

per Apache questo può essere fatto facilmente con seguente:

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

Il sotto sembrano funzionare, ma non è consigliabile in base alla ifisevil page.

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

risposta

19

Il modo migliore per farlo in nginx è con una combinazione di due blocchi di server:

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 
} 

Ho testato questo sul mio portatile, dal momento che hai segnalato che non funziona. Ottengo il seguente risultato a livello locale (dopo l'aggiunta www2.test.localhost e www.test.localhost al mio /etc/hosts, insieme con il bit di configurazione nginx, e ricarico 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/ 

Quindi sì, questo funziona sicuramente.

+2

per favore, non usare 'riscrivere^permanent' invece di semplice' return'. L'esecuzione dell'espressione regolare (anche se molto semplice '^') è solo uno spreco di CPU in questo caso. – VBart

+0

buon punto, modificato che – cobaco

+0

ha provato questo, non funziona, non invia un'intestazione 301 non lo reindirizza a www.site.com in realtà reindirizza a un altro sito sul server ma lascia sottodominio.site.com nell'adressbar – user2143308

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

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

Riferimenti:

+0

provato questo, non funziona, non invia un'intestazione 301 né lo reindirizza a www.site.com in realtà si reindirizza a un altro sito sul server ma lascia sottodominio.site.com nel problema adressbar – user2143308

+0

forse quel 'site.com' non corrisponde a' * .site.com' (non al punto). – regilero

+2

ho provato .site.com che cattura sia *. Site.com che site.com secondo il manuale – user2143308

Problemi correlati