Come reindirizzare a un dominio diverso utilizzando NGINX?


136

Come faccio a reindirizzare mydomain.come qualsiasi sottodominio *.mydomain.comdi www.adifferentdomain.comutilizzare Nginx?

Risposte:


276

nome_server supporta le corrispondenze dei suffissi utilizzando la sintassi .mydomain.com:

server {
  server_name .mydomain.com;
  rewrite ^ http://www.adifferentdomain.com$request_uri? permanent;
}

o su qualsiasi versione 0.9.1 o successiva:

server {
  server_name .mydomain.com;
  return 301 http://www.adifferentdomain.com$request_uri;
}

1
Non è necessario inserire una porta per l'ascolto? ad esempio, ascolto 80. Ho più domini che devo reindirizzare a un dominio primario, ma il mio server ha anche più server virtuali per vari altri domini.
— Ryan,

1
@Ryan La listendirettiva passa automaticamente alla porta 80 quando non viene specificata. In realtà è un po 'più complicato di quello in generale; vedere i documenti di configurazione di nginx per maggiori dettagli.
— Yitz,

2
Cosa ?ottiene alla fine?
— Dan Dascalescu il

5
Qual è la differenza tra rewritee return 301 $scheme://www.adifferentdomain.com$request_uri;?
— Dan Dascalescu il

6
Il ? alla fine di una riscrittura dice a nginx di non aggiungere la stringa di query originale. Poiché $request_uriha già la stringa di query, non è necessario aggiungerla di nuovo. La return 301sintassi è più recente e non dovrebbe esserci alcuna differenza nel comportamento tra i due metodi, ma quando inizialmente ho risposto a questa domanda, molte distribuzioni non avevano la versione richiesta, quindi sono andato con la sintassi più sicura.
— kolbyjack,


15

Perché usare il modulo di riscrittura se puoi farlo return? Tecnicamente parlando, returnfa parte del modulo di riscrittura come puoi leggere qui, ma questo frammento è più facile da leggere imho.

server {
    server_name  .domain.com;

    return 302 $scheme://forwarded-domain.com;
}

Puoi anche dargli un reindirizzamento 301.


1
Ciò manterrà anche i parametri di percorso e query?
— Aprire il

3
No, questo esempio non lo fa @Mark. Ma suppongo che tu possa mescolare le risposte precedenti per trovare qualcosa del genere:return 302 $scheme://forwarded-domain.com$request_uri;
— Robin van Baalen,

In una nota a margine, in molti casi, probabilmente dovresti semplicemente reindirizzare a https invece di preservare lo schema (cioè usa https invece di $ schema). Questo è per gli stessi motivi per cui i collegamenti relativi al protocollo sono ora considerati obsoleti
— paulirish.com/2010/the-protocol-relative-url

@mahemoff Non è del tutto vero. Considera il caso di avere il server web dietro un bilanciamento del carico che sta scaricando ssl.
— Sebastian Neira,

11

Dovrebbe funzionare tramite HTTPRewriteModule .

Esempio di riscrittura da www.esempio.com a esempio.com:

server {    
    server_name www.example.com;    
    rewrite ^ http://example.com$request_uri? permanent; 
}

che sta semplicemente reindirizzando www.example.com a example.com. Voglio reindirizzare entrambi su un dominio diverso. Posso farlo in una regola?
— deb.

Non lo so per certo, ma penso che nome_server mydomain.com; riscrivere www.adifferentdomain.com permanente; } dovrebbe farlo? Ciò dovrebbe richiedere tutto * .mydomain.com?
— Udo

@deb avresti semplicemente server_name example.com www.example.com;.
— citruspi,

La domanda richiede specificamente che tutti i sottodomini vengano reindirizzati a un dominio diverso . Questa risposta non risponde a nessuno dei due (esplicitamente).
— Kissaki,

questo manca l'importante 301!
— Sliq,

9

Se desideri reindirizzare le richieste di "domain1.com" a "domain2.com", puoi creare un blocco server simile al seguente:

server {
    listen 80;
    server_name domain1.com;
    return 301 $scheme://domain2.com$request_uri;
}

Qualcuno potrebbe dover reindirizzare anche https: // request. listen 443;
— Rafik Farhad,

0

Reindirizzamento temporaneo

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? redirect;

Reindirizzamento permanente

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? permanent;

Nel file di configurazione nginx per sito specifico:

server {    
    server_name www.example.com;
    rewrite ^ http://www.RedictToThisDomain.com$request_uri? redirect;

}

0

Puoi semplicemente scrivere una condizione if all'interno del blocco server {}:

server { 

    if ($host = mydomain.com) {
        return 301 http://www.adifferentdomain.com;
    } 
}

Devi stare attento usando le istruzioni "if" su Nginx ( nginx.com/resources/wiki/start/topics/depth/ifisevil ). In questo caso puoi semplicemente usare "nome_server mydomain.com".
— Marty

se è male quando usato nel contesto della posizione, è sicuro se usato per specificare l'host di reindirizzamento
— cryptoKTM
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.