Come ottenere il reindirizzamento di nginx dal dominio www al dominio non www?


9

Diciamo che voglio reindirizzare da www.example.com a example.com e voglio farlo usando nginx. Mi sono guardato intorno e non ho visto alcuna buona documentazione su questo, quindi ho pensato che avrei chiesto e risposto alla mia domanda.

Risposte:


7

Ho anche guardato questo sul wiki di Nginx e su altri blog e il modo migliore in termini di prestazioni è fare quanto segue:

Per reindirizzare da www.example.com a example.com utilizzando nginx (versione 1.0.12 al momento della scrittura).

server {
  server_name www.example.com;
  rewrite ^ $scheme://example.com$request_uri permanent; 
  # permanent sends a 301 redirect whereas redirect sends a 302 temporary redirect
  # $scheme uses http or https accordingly
}

server {
  server_name example.com;
  # the rest of your config goes here
}

Quando le richieste arrivano a example.com, no se le dichiarazioni vengono utilizzate per le prestazioni. E usa $ request_uri invece di dover creare una corrispondenza di $ 1 che tassa la riscrittura (vedi la pagina Insidie ​​comuni di Nginx).

fonti:


Nel mio test, le direttive devono essere invertite, vale a dire. quello di riscrittura deve venire dopo il server {}blocco di configurazione principale .
Karmi,

4

Dopo un po 'di ricerche e alcuni passi falsi, ecco la soluzione. Il gotcha in cui mi sono imbattuto è assicurarmi di usare " http://example.com $ uri". Inserendo un / davanti a $ uri si ottiene un reindirizzamento a http://example.com//

  server {
    listen 80;
    server_name www.example.com;
    rewrite ^ http://example.com$uri permanent;
  }

  # the server directive is nginx's virtual host directive.
  server {
    # port to listen on. Can also be set to an IP:PORT
    listen 80;

    # Set the charset
    charset utf-8;

    # Set the max size for file uploads to 10Mb
    client_max_body_size 10M;

    # sets the domain[s] that this vhost server requests for
    server_name example.com;

    # doc root
    root /var/www/example.com;

    # vhost specific access log
    access_log  /var/log/nginx_access.log  main;


    # set vary to off to avoid duplicate headers
    gzip off;
    gzip_vary off;


    # Set image format types to expire in a very long time
    location ~* ^.+\.(jpg|jpeg|gif|png|ico)$ {
        access_log off;
        expires max;
    }

    # Set css and js to expire in a very long time
    location ~* ^.+\.(css|js)$ {
        access_log off;
        expires max;
    }

    # Catchall for everything else
    location / {
      root /var/www/example.com;
      access_log off;

      index index.html;
      expires 1d;

      if (-f $request_filename) {
        break;
      }
    }
  }

4

Si prega di visitare questa domanda in SO: https://stackoverflow.com/a/11733363/846634

Dalla migliore risposta:

In realtà non hai nemmeno bisogno di una riscrittura.

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...
}

Poiché la mia risposta è ottenere sempre più voti, ma anche quanto sopra. Non dovresti mai usare a rewritein questo contesto. Perché? Perché nginx deve elaborare e avviare una ricerca. Se usi return(che dovrebbe essere disponibile in qualsiasi versione di nginx), interrompe direttamente l'esecuzione. Questo è preferito in qualsiasi contesto.


1

Per reindirizzare a non www, modificare il file vhost:

server {
  listen 80;
  server_name www.example.com;
  rewrite ^/(.*) http://example.com/$1 permanent;
}

'Permanente' trasforma il reindirizzamento in un reindirizzamento 301. Dopo questo blocco di codice, puoi configurare il dominio senza www.

Per il reindirizzamento da non www a www:

server {
  listen 80;
  server_name example.com;
  rewrite ^/(.*) http://www.example.com/$1 permanent;
}

Thassit.

A proposito, per la configurazione VPS completa utilizzando Nginx, controlla la Bibbia VPS sul mio sito, guvnr.com, e spero sia utile!


0

Questo è quello che uso:

# ---------------------------------------
# vHost www.example.com
# ---------------------------------------

server {

##
# Redirect www.domain.tld
##

    server_name  www.example.com;
    rewrite ^(.*) http://example.com$1 permanent;

}

# ---------------------------------------
# vHost example.com
# ---------------------------------------

server {

   # Something Something
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.