Nginx redireciona todos os subdomínios de domínio antigo para um novo

9

Eu tinha um domínio muito longo, então decidi mudá-lo para um mais curto e mais amigável. Mas como tenho muitos subdomínios (na verdade, tenho um curinga de subdomínio), queria manter o subdomínio enquanto altero apenas a parte do domínio. Então, fiz a seguinte regra:

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

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

Eu li muitas outras perguntas em que esse fragmento resolveu o problema. Mas comigo, o Nginx sempre redireciona para .domain.in , sem nenhum subdomínio. o que estou perdendo? Eu testei o regex contra o regex101 e os exemplos funcionam bem, o Nginx parece incapaz de redirecioná-lo.

    
por ranisalt 23.03.2014 / 06:44

1 resposta

18

Como as capturas nomeadas do nginx 0.8.25 podem ser usadas no server_name. Você deveria usá-los.

Aqui, o subdomínio será armazenado em uma variável chamada $sub . Então você poderá reutilizá-lo na diretiva rewrite :

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

Como alternativa, você pode manter seu Regex real e usar $1 em uma diretiva return :

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

Por fim, observe que a diretiva return é a melhor abordagem para um redirecionamento. Você pode encontrar Pitfalls usando rewrite para um redirecionar.

    
por 23.03.2014 / 15:13