Nginx redirige todos los subdominios de dominio antiguos a uno nuevo

10

Tenía un dominio muy largo, así que decidí cambiarlo a uno más corto y amigable. Pero dado que tengo muchos subdominios (de hecho, tengo un comodín de subdominio), quería mantener el subdominio mientras cambiaba solo la parte del dominio. Entonces, hice la siguiente regla:

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

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

He leído muchas otras preguntas en las que este fragmento resolvió el problema. Pero conmigo, Nginx siempre redirige a .domain.in, sin ningún subdominio. ¿Qué me estoy perdiendo? He probado el regex contra regex101 y los ejemplos funcionan bien, Nginx parece incapaz de redirigirlo.

ranisalt
fuente

Respuestas:

22

Desde nginx 0.8.25 las capturas con nombre se pueden usar en server_name. Deberías usarlos.

Aquí, el subdominio se almacenará en una variable llamada $sub. Entonces podrá reutilizarlo en la rewritedirectiva:

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

Alternativamente, puede mantener su Regex real y usarla $1en una returndirectiva:

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

Finalmente, tenga en cuenta que la returndirectiva es el mejor enfoque para una redirección. Puede encontrarse con trampas utilizando rewritepara una redirección.

krisFR
fuente
Perfecto. Utilicé el enfoque de devolución pero aún así llamé la parte regex, es mucho más fácil de entender.
ranisalt el
¿Qué sucede si también queremos redirigir sin un subdominio (www)? como: sub1.ex.to> sub1.new.in y ex.to> www.new.in?
R. Canser Yanbakan
1
Tenga en cuenta que '\ w' no coincide con ciertos caracteres que pueden estar en nombres de dominio, por ejemplo, '-'. Por lo tanto, la expresión regular anterior se redirigirá test-sub.doma.ina .domai.in!
Wolfgang
use [\ w \ - \ _] + en lugar de \ w + para los subdominios que tienen - y _ en ellos
Sajjad Ashraf
¿Qué hace ~en la expresión regular al principio? No hace ya que ese algo aparecería antes ^en regex.
hobbes3