2013-03-07 24 views
11

nginx kullanarak tüm joker alt alanları yeniden yazmak, ben www.example.com için example.com tüm alt etki alanlarını yönlendirmek istiyoruz.nginx www.site.com

Yönlendirmeler burada, www olmayan veya www tam tersine yönlendirmek için gördüm, ancak ben de yeniden yönlendirilmek üzere www2.site.com blabla.site.com istiyorum. Etki alanı için joker kartım var.

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

aşağıda çalışmıyor gibi görünüyor, ama ifisevil page göre önerilmez:

apache için bu aşağıdaki kolayca yapılabilir.

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

cevap

19

nginx içinde bunu yapmanın en iyi yolu iki sunucu bloklarının kombinasyonu ile geçerli: Eğer çalışmıyorsa bildirilen beri

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 
} 

benim laptop bu test ettik. Ben (nginx nginx yapılandırma bit birlikte benim /etc/hosts için www2.test.localhost ve www.test.localhost ekleyerek ve yeniden yüklendikten sonra) lokal olarak şu sonucu alırsınız:

$ 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/ 

Yani evet, bu kesinlikle çalışır.

+2

Lütfen 'kullanmak^permanent' yerine basit' return' yeniden yoktur. Düzenli ifadeyi (çok basit bir '' '') yürütmek bu durumda yalnızca CPU’yu boşa harcıyor. – VBart

+0

iyi bir nokta, – cobaco

+0

bunu denedi, işe yaramadı, bir 301 üstbilgisini göndermiyor, www.site.com adresine yönlendirmiyor, aslında sunucudaki farklı bir siteye yönlendiriyor ancak altdomain.site.com – user2143308

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

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

Referanslar:

+0

bir 301 başlık göndermez, bu işi does't, bu denenmiş ne de aslında sunucuda farklı bir siteye yönlendirir www.site.com yönlendiriyor ama – user2143308

+0

sorundur adressbar içinde subdomain.site.com bırakır belki site.com' maç '* .site.com' (değil dot) gelmez' söyledi. – regilero

+2

çabaladığımı .site.com wich hem * .site.com ve site.com kılavuzuna göre yakalar – user2143308