Aqui está o meu atual nginx conf:
server {
listen 90;
server_name www.domain.com www.domain2.com;
root /root/app;
location / {
try_files $uri =404;
}
location ~ /([-\w]+)/(\w+)/ {
proxy_pass bla bla
}
}
funciona bem, ambos www.domain.com
e www.domain2.com
veicula o mesmo conteúdo.
agora eu gostaria de adicionar
se o usuário estiver visitando www.domain.com e o agente do usuário for xxx, redirecione para www.domain2.com
Eu pesquisei e tentei muitos métodos, mas nenhum deles funciona.
Respostas:
Existem duas maneiras de corrigir esse problema.
Tenha dois blocos de "servidor" separados para www.domain.com e www.domain2.com e adicione as seguintes linhas de regras ao bloco "servidor" www.domain.com. Essa é a maneira recomendada de resolver esse problema.
Se você deseja gerenciar o redirecionamento com um único bloco "servidor" para os dois domínios, tente as regras abaixo
fonte
Etapa 1: tenha dois blocos de servidor, um para domínio.com e domínio2.com.
Etapa 2: use se corretamente , pois é mau se usado incorretamente.
Aqui está a solução completa ...
fonte
A maneira recomendada provavelmente seria usar a
map
, também porque essas variáveis são avaliadas apenas quando são usadas.Também
return 301 ...
é preferível o uso de reescritas, porque nenhuma expressão regular precisa ser compilada.Aqui um exemplo de onde host e user-agent como uma cadeia concatenada são comparados a uma única regex:
E isso pode ser ainda mais flexível, por exemplo, se não houver 2, mas mais domínios envolvidos.
Aqui nós mapear
www.domain.com
com user-agents começando comAgent
ahttp://www.domain2.com
ewww.domain2.com
com a exata user-agentOther Agent
parahttp://www.domain3.com
:Nota: você precisará do nginx 0.9.0 ou superior para que a sequência concatenada no mapa funcione.
fonte