Nginx WWW निकालें और दोनों को जवाब दें




http-status-code-301 (5)

मेरे पास निम्नलिखित nginx कॉन्फ़िगरेशन खंड है:

server {
   listen 80;

   server_name mydomain.io;

   root /srv/www/domains/mydomain.io;

   index index.html index.php;

   access_log /var/log/nginx/domains/mydomain.io/access.log;
   error_log /var/log/nginx/domains/mydomain.io/error.log;

   location ~\.php {
      try_files $uri =404;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_intercept_errors on;
      fastcgi_pass 127.0.0.1:9000;
      include /etc/nginx/fastcgi_params;
   }
}

सबसे पहले, मैं सर्वर ब्लॉक को http://www.mydomain.io और http://mydomain.io both को कैसे प्रतिक्रिया दे सकता हूं। दूसरा, अगर वे http://www.mydomain.io से http://mydomain.io पर रीडायरेक्ट करने के लिए आते हैं तो मैं मजबूर होना चाहता हूं।

धन्यवाद।


इसे कोड करने का एक और तरीका:

if ($http_host ~* "^www\.(.+)$"){
    rewrite ^(.*)$ http://%1$request_uri redirect;
}

यह एक ही कोड पर कई डोमेन नामों के साथ भी काम करता है।



server {
    listen 80;
    server_name www.mydomain.io;
    return 301 https://$host$request_uri;
}

server {
    listen 80;
    server_name mydomain.io;
    ...
}

पहले प्रश्न पर - बस दोनों डोमेन जोड़ें:

server_name mydomain.io www.mydomain.io;

दूसरे के लिए, आपको इस सरल रीडायरेक्ट की आवश्यकता होगी:

server {
      listen 80;

      server_name www.mydomain.io mydomain.io;

      if ($host = 'www.mydomain.io' ) {
         rewrite  ^/(.*)$  http://mydomain.io/$1  permanent;
      }

मेरा मानना ​​है कि if ब्लॉक द्वारा अनावश्यक जांच से बचने के लिए दो अलग-अलग सर्वर ब्लॉक जोड़ना बेहतर होता है। मैं $ स्कीम वैरिएबल का भी उपयोग करता हूं ताकि HTTPS अनुरोध उनके असुरक्षित समकक्षों पर रीडायरेक्ट नहीं किए जाएंगे।

server {
    listen 80;

    server_name www.mydomain.io;

    rewrite ^ $scheme://mydomain.io$uri permanent;
}

server {
    listen 80;

    server_name mydomain.io;

    # your normal server block definitions here
}




http-status-code-301