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




http-status-code-301 (4)

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

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

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

मेरे पास निम्नलिखित 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 पर रीडायरेक्ट करने के लिए आते हैं तो मैं मजबूर होना चाहता हूं।

धन्यवाद।


किसी सामान्य डोमेन या प्रोटोकॉल का उल्लेख किए बिना, सामान्य दृष्टिकोण के लिए, मैंने इसे सफलतापूर्वक उपयोग किया है:

  # rewrite to remove www.
  if ( $host ~ ^www\.(.+)$ ) {
    set $without_www $1;
    rewrite ^ $scheme://$without_www$uri permanent;
  }

यह रीडायरेक्ट करेगा: https://www.api.example.com/person/123?q=45 https://api.example.com/person/123?q=45


मेरा मानना ​​है कि 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