2013-03-07 6 views
11

का उपयोग करके nginx का उपयोग करके, मैं example.com से www.example.com के सभी सबडोमेन को पुनर्निर्देशित करना चाहता हूं।nginx सभी वाइल्डकार्ड सबडोमेन को www.site.com

मैंने गैर-www को www या vise के विपरीत रीडायरेक्ट करने के लिए यहां रीडायरेक्ट किए हैं, लेकिन मैं रीडायरेक्ट होने के लिए www2.site.com blabla.site.com भी चाहता हूं। मेरे पास डोमेन के लिए वाइल्डकार्ड डीएनएस है।

अपाचे के लिए यह निम्नलिखित के साथ आसानी से किया जा सकता है:

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 
} 

मैं अपने लैपटॉप पर इस परीक्षण किया है जब से तुम सूचना यह काम नहीं कर। मैं निम्नलिखित परिणाम स्थानीय रूप से प्राप्त (मेरी /etc/hosts करने के लिए www2.test.localhost और www.test.localhost जोड़ने, nginx config बिट के साथ साथ, और 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'। नियमित अभिव्यक्ति निष्पादित करना (यहां तक ​​कि इतना आसान एक '^') सिर्फ इस मामले में सीपीयू को बर्बाद कर रहा है। – VBart

+0

अच्छा बिंदु, बदल गया कि – cobaco

+0

ने कोशिश की, यह काम नहीं करता है, 301 हेडर नहीं भेजता है, यह www.site.com पर रीडायरेक्ट नहीं करता है, वास्तव में यह सर्वर पर एक अलग साइट पर रीडायरेक्ट करता है लेकिन ledom subdomain.site.com adressbar – 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 पर रीडायरेक्ट करता है, वास्तव में यह सर्वर पर एक अलग साइट पर रीडायरेक्ट करता है लेकिन adressbar – user2143308

+0

समस्या में subdomain.site.com छोड़ देता है हो सकता है कि 'site.com'' * .site.com' (डॉट नहीं) से मेल नहीं खाता है। – regilero

+2

मैंने कोशिश की .site.com जो मैन्युअल के अनुसार * .site.com और site.com दोनों को पकड़ता है – user2143308

संबंधित मुद्दे