nginx regra de reescrita para usar o host de domínio para redirecionar para o diretório interno específico

5

Sou novo no Nginx reescrevei e procurei ajuda para obter um código de reescrita mínimo e funcional. Gostaríamos de usar URLs como "somecity.domain.com" nos materiais da campanha e ter o resultado como conteúdo específico da cidade no site "www".

Então, aqui estão os casos de uso, se o cliente entrar:

www.domain.com                          (stays) www.domain.com
domain.com                              (goes to) www.domain.com
www.domain.com/someuri                  (stays the same)
somecity.domain.com                     (no uri, goes to) www.domain.com/somecity/prelaunch
somecity.domain.com/landing             (goes to)   www.domain.com/somecity/prelaunch
somecity.domain.com/anyotheruri         (goes to) www.domain.com/anyotheruri

Aqui está o que eu tenho feito até agora, e isso funciona parcialmente. O que não consigo entender é como verificar se não há caminho / uri após o host, e estou supondo que provavelmente há uma maneira muito melhor de fazer isso.

if ($host ~* ^(.*?)\.domain\.com)
{   set $city $1;}
if ($city ~* www)
{   break; }
if ($city !~* www)
{ 
  rewrite ^/landing http://www.domain.com/$city/prelaunch/$args permanent;
  rewrite (.*) http://www.domain.com$uri$args permanent;
}
    
por user85836 27.06.2011 / 18:01

1 resposta

13

Isso é melhor realizado usando três servidores:

# www.domain.com, actually serves content
server {
  server_name www.domain.com;
  root /doc/root;

  # locations, etc
}

# redirect domain.com -> www.domain.com
server {
  server_name domain.com;
  rewrite ^ http://www.domain.com$request_uri? permanent;
}

# handle anything.domain.com that wasn't handled by the above servers
server {
  # ~ means regex server name
  # 0.8.25+
  #server_name ~(?<city>.*)\.domain\.com$;

  # < 0.8.25
  server_name ~(.*)\.domain\.com$;
  set $city $1;

  location = / { rewrite ^ http://www.domain.com/$city/prelaunch; }
  location = /landing { rewrite ^ http://www.domain.com/$city/prelaunch; }
  # should there be a /$city before $request_uri?
  location / { rewrite ^ http://www.domain.com$request_uri?; }
}
    
por 27.06.2011 / 18:57

Tags