Nginx reindirizza tutti i sottodomini di dominio precedenti a quello nuovo


10

Avevo un dominio molto lungo, quindi ho deciso di cambiarlo in uno più breve e più amichevole. Ma dal momento che ho molti sottodomini (in realtà, ho un jolly sottodominio), volevo mantenere il sottodominio cambiando solo la parte del dominio. Quindi, ho fatto la seguente regola:

server {
  listen 80;
  server_name ~^(\w+)\.olddomain\.com$;

  rewrite ^ $scheme://$1.doma.in$request_uri? permanent;
}

Ho letto molte altre domande in cui questo frammento ha risolto il problema. Ma con me, Nginx reindirizza sempre a .domain.in, senza alcun sottodominio. Cosa mi sto perdendo? Ho testato il regex contro regex101 e gli esempi funzionano bene, Nginx sembra incapace di reindirizzarlo.

Risposte:


22

Poiché nginx 0.8.25 è possibile utilizzare acquisizioni con nome in nome_server. Dovresti usarli.

Qui, il sottodominio verrà archiviato in una variabile chiamata $sub. Quindi sarai in grado di riutilizzarlo nella rewritedirettiva:

server {
  listen 80;
  server_name ~^(?<sub>\w+)\.olddomain\.com$;
  rewrite ^ $scheme://$sub.doma.in$request_uri? permanent;
}

In alternativa, puoi mantenere il tuo attuale Regex e utilizzarlo $1in una returndirettiva:

server {
  listen 80;
  server_name ~^(\w+)\.olddomain\.com$;
  return 301 $scheme://$1.doma.in$request_uri;
}

Infine, nota che la returndirettiva è l'approccio migliore per un reindirizzamento. Puoi imbatterti in insidie usando rewriteper un reindirizzamento.


Perfetto. Ho usato l'approccio return ma ho ancora chiamato la parte regex, è molto più facile da capire.
ranisalt,

E se volessimo reindirizzare anche senza un sottodominio (www)? come: sub1.ex.to> sub1.new.in ed ex.to> www.new.in?
R. Canser Yanbakan il

1
Nota che "\ w" non corrisponde a determinati caratteri che possono essere nei nomi di dominio, ad esempio "-". Il regex di cui sopra verrà quindi reindirizzato test-sub.doma.ina .domai.in!
Wolfgang,

usa [\ w \ - \ _] + invece di \ w + per i sottodomini che hanno - e _ in essi
Sajjad Ashraf,

Cosa fa ~nel regex all'inizio? Non fa dal momento che qualcosa apparirebbe prima ^in regex.
hobbes3,
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.