Voici ma conf nginx actuelle:
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
}
}
cela fonctionne bien, les deux www.domain.com
et www.domain2.com
servent le même contenu.
maintenant j'aimerais ajouter
si l'utilisateur visite www.domain.com et que l'agent utilisateur est xxx, redirigez-le vers www.domain2.com
J'ai cherché et essayé beaucoup de méthodes, mais aucune d'entre elles ne fonctionne.
Réponses:
Il existe deux façons de résoudre ce problème.
Disposez de deux blocs "serveur" séparés pour www.domain.com et www.domain2.com et ajoutez les lignes de règles suivantes au bloc "serveur" www.domain.com. Il s'agit de la méthode recommandée pour résoudre ce problème.
Si vous souhaitez gérer la redirection avec un seul bloc "serveur" pour les deux domaines, essayez les règles ci-dessous
la source
Étape 1: avoir deux blocs serveur, un pour domain.com et domain2.com chacun.
Étape 2: Utilisez si correctement car il est mauvais s'il n'est pas utilisé correctement.
Voici la solution complète ...
la source
La méthode recommandée serait probablement d'utiliser a
map
, également parce que ces variables ne sont évaluées que lorsqu'elles sont utilisées.L'utilisation de
return 301 ...
est préférable à la réécriture, car aucune expression régulière ne doit être compilée.Voici un exemple où l'hôte et l'agent utilisateur en tant que chaîne concaténée sont comparés à une expression régulière unique:
Et cela pourrait être encore plus flexible, par exemple s'il n'y a pas 2 mais plus de domaines impliqués.
Nous carte ici
www.domain.com
avec les agents utilisateurs en commençant parAgent
àhttp://www.domain2.com
etwww.domain2.com
avec l'exacte user-agentOther Agent
àhttp://www.domain3.com
:NB vous aurez besoin de nginx 0.9.0 ou supérieur pour que la chaîne concaténée dans la carte fonctionne.
la source