Je souhaite rediriger des demandes sur deux conditions à l'aide de nginx.
Cela ne marche pas:
if ($Host = 'domain.com' || $Host = 'domain2.com'){
rewrite ^/(.*)$ http://www.domain.com/$1 permanent;
}
Quelle est la bonne façon de faire cela?
J'ai eu ce même problème avant. Nginx ne pouvant pas créer de conditions complexes ni d’instructions if imbriquées, vous devez évaluer plus de 2 expressions différentes.
définissez une variable sur une valeur binaire, puis activez-la si l'une des conditions est vraie dans 2 déclarations if différentes:
set $my_var 0;
if ($Host = 'domain.com') {
set $my_var 1;
}
if ($Host = 'domain2.com') {
set $my_var 1;
}
if ($my_var = 1) {
rewrite ^/(.*)$ http://www.domain.com/$1 permanent;
}
La bonne façon serait d'utiliser un serveur dédié pour la redirection:
server {
server_name domain.com domain2.com;
rewrite ^ http://www.domain.com$request_uri? permanent;
}
une autre possibilité serait
server_name domain.com domain2.com;
set $wanted_domain_name domain.com;
if ($http_Host != $wanted_domain_name) {
rewrite ^(.*)$ https://$wanted_domain_name$1;
}
de sorte qu'il va tout rediriger vers un spécifique, mais il est basé sur le cas d'utilisation je suppose
Voici une approche déclarative:
server {
listen 80;
server_name domain.com domain2.com;
return 301 $scheme://www.domain.com$uri;
}
server {
listen 80 default_server;
server_name _;
#....
}
Réécrire plusieurs domaines dans un seul domaine et éviter une condition de boucle dans le navigateur.
server {
listen 80;
server_name www.wanted_domain.com wanted_domain.com www.un_wanted_domain.com un_wanted_domain.com;
if ($Host = 'un_wanted_domain.com'){
return 301 $scheme://www.wanted_domain.com$request_uri;
}
if ($Host = 'www.un_wanted_domain.com'){
return 301 $scheme://www.wanted_domain.com$request_uri;
}
Je pense que la façon la plus simple de le faire est d'utiliser simplement l'expression régulière:
if ($Host ~ "domain.com|domain2.com") {
rewrite ^/(.*)$ http://www.example.com/$1 permanent;
}
Mais ce n’est bien que lorsque vous n’avez que des chaînes; pour la logique complexe, bien sûr, ce n'est pas correct.