[redirect] Nginx नो-www www और www से नो-www


Answers

दरअसल आपको एक पुनर्लेख की भी आवश्यकता नहीं है।

server {
    #listen 80 is default
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

server {
    #listen 80 is default
    server_name example.com;
    ## here goes the rest of your conf...
}

चूंकि मेरा जवाब अधिक से ज्यादा वोट प्राप्त कर रहा है लेकिन ऊपर भी। आपको इस संदर्भ में rewrite का कभी भी उपयोग नहीं करना चाहिए। क्यूं कर? क्योंकि nginx को एक प्रक्रिया को संसाधित करना और शुरू करना है। यदि आप return उपयोग करते return (जो किसी भी nginx संस्करण में उपलब्ध होना चाहिए) यह सीधे निष्पादन रोकता है। यह किसी भी संदर्भ में पसंद किया जाता है।

दोनों गैर-एसएसएल और एसएसएल को उनके गैर-www समकक्ष को पुनर्निर्देशित करें:

server {
    listen               80;
    listen               443 ssl;
    server_name          www.example.com;
    ssl_certificate      path/to/cert;
    ssl_certificate_key  path/to/key;

    return 301 $scheme://example.com$request_uri;
}

server {
    listen               80;
    listen               443 ssl;
    server_name          example.com;
    ssl_certificate      path/to/cert;
    ssl_certificate_key  path/to/key;

    # rest goes here...
}

$scheme वैरिएबल में केवल http यदि आपका सर्वर केवल पोर्ट 80 (डिफ़ॉल्ट) पर सुन रहा है और सुनो विकल्प में ssl कीवर्ड नहीं है। चर का उपयोग नहीं करने से आपको कोई प्रदर्शन नहीं मिलेगा।

ध्यान दें कि यदि आप एचएसटीएस का उपयोग करते हैं तो आपको और भी सर्वर ब्लॉक की आवश्यकता है, क्योंकि एचएसटीएस हेडर को गैर-एन्क्रिप्टेड कनेक्शन पर नहीं भेजा जाना चाहिए। इसलिए, आपको रीडायरेक्ट और एचएसटीएस हेडर के साथ रीडायरेक्ट और एन्क्रिप्टेड सर्वर ब्लॉक के साथ अनएन्क्रिप्टेड सर्वर ब्लॉक की आवश्यकता है।

एसएसएल में सबकुछ रीडायरेक्ट करें (आईपीवी 4, आईपीवी 6, एसपीडीवाई, के साथ यूनिक्स पर व्यक्तिगत कॉन्फ़िगरेशन ...):

#
# Redirect all www to non-www
#
server {
    server_name          www.example.com;
    ssl_certificate      ssl/example.com/crt;
    ssl_certificate_key  ssl/example.com/key;
    listen               *:80;
    listen               *:443 ssl spdy;
    listen               [::]:80 ipv6only=on;
    listen               [::]:443 ssl spdy ipv6only=on;

    return 301 https://example.com$request_uri;
}

#
# Redirect all non-encrypted to encrypted
#
server {
    server_name          example.com;
    listen               *:80;
    listen               [::]:80;

    return 301 https://example.com$request_uri;
}

#
# There we go!
#
server {
    server_name          example.com;
    ssl_certificate      ssl/example.com/crt;
    ssl_certificate_key  ssl/example.com/key;
    listen               *:443 ssl spdy;
    listen               [::]:443 ssl spdy;

    # rest goes here...
}

मुझे लगता है कि आप अपने आप से इस पैटर्न के साथ अन्य यौगिकों की कल्पना कर सकते हैं।

मेरी अधिक विन्यास? here और here जाओ।

Question

मैं ट्यूटोरियल के बाद रैकस्पेस क्लाउड पर nginx का उपयोग कर रहा हूं और नेट की खोज कर रहा हूं और अब तक इसे हल नहीं किया जा सकता है।

मैं www.mysite.com को एसईओ और अन्य कारणों के लिए .htaccess में सामान्य के रूप में mysite.com पर जाना चाहता हूं।

मेरा /etc/nginx/sites-available/www.example.com.vhost कॉन्फ़िगरेशन:

server {
       listen 80;
       server_name www.example.com example.com;
       root /var/www/www.example.com/web;

       if ($http_host != "www.example.com") {
                 rewrite ^ http://example.com$request_uri permanent;
       }

मैंने भी कोशिश की है

server {
       listen 80;
       server_name example.com;
       root /var/www/www.example.com/web;

       if ($http_host != "www.example.com") {
                 rewrite ^ http://example.com$request_uri permanent;
       }

मैंने भी कोशिश की। दोनों दूसरे प्रयास रीडायरेक्ट लूप त्रुटियां देते हैं।

if ($host = 'www.example.com' ) {
rewrite ^ http://example.com$uri permanent;
}

मेरा DNS मानक के रूप में सेट है:

site.com 192.192.6.8 A type at 300 seconds
www.site.com 192.192.6.8 A type at 300 seconds

(उदाहरण आईपी और फ़ोल्डर्स उदाहरण के लिए इस्तेमाल किए गए हैं और भविष्य में लोगों की मदद के लिए)। मैं उबंटू 11 का उपयोग करता हूं।




भूत ब्लॉग

return 301 $scheme://example.com$request_uri; साथ nginx अनुशंसित विधि बनाने के लिए return 301 $scheme://example.com$request_uri; भूत के साथ काम करने के लिए आपको अपने मुख्य सर्वर ब्लॉक में जोड़ना होगा:

proxy_set_header    X-Real-IP           $remote_addr;
proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
proxy_set_header    Host                $http_host;
proxy_set_header    X-Forwarded-Proto   $scheme;
proxy_set_header    X-NginX-Proxy       true;

proxy_pass_header   X-CSRF-TOKEN;
proxy_buffering     off;
proxy_redirect      off;  



location / { 
    if ($http_host !~ "^www.domain.com"){ 
        rewrite ^(.*)$ $scheme://www.domain.com/$1 redirect; 
    } 
}



यहां कई www से नो-www सर्वर नामों के लिए इसे कैसे किया जाए (मैंने इसे सबडोमेन के लिए उपयोग किया):

server {
        server_name 
             "~^www\.(sub1.example.com)$"
             "~^www\.(sub2.example.com)$"
             "~^www\.(sub3.example.com)$";
         return 301 $scheme://$1$request_uri ;
}



if ($host ~* ^www.example.com$) {
    return 301 $scheme://example.com$request_uri;
}



अद्वितीय प्रारूप:

server {
  listen 80;
  server_name "~^www\.(.*)$" ;
  return 301 https://$1$request_uri ;
}



यह समाधान मेरे व्यक्तिगत अनुभव से आता है। हमने एस 3 "होस्ट" हेडर पॉलिसी से मेल खाने के लिए non-www से www डोमेन नामों को पुनर्निर्देशित करने के लिए कई अमेज़ॅन एस 3 बाल्टी और एक सर्वर का उपयोग किया।

मैंने nginx सर्वर के लिए निम्न कॉन्फ़िगरेशन का उपयोग किया:

server {
    listen 80;
    server_name ~^(?!www\.)(?<domain>.+)$;
    return 301 $scheme://www.$domain$request_uri;
}

यह उन सभी डोमेन नामों से मेल खाता है जो www. साथ शुरू होने वाले सर्वर से इंगित करते हैं www. और www.<domain> रीडायरेक्ट करता है। इसी तरह आप www से non-www www तक विपरीत रीडायरेक्ट कर सकते हैं।




Links