nginx.conf перенаправить несколько условий - PullRequest
46 голосов
/ 29 января 2011

Я хочу перенаправить запросы на двух условиях, используя nginx.

Это не работает:

  if ($host = 'domain.com' || $host = 'domain2.com'){
    rewrite ^/(.*)$ http://www.domain.com/$1 permanent;
  }   

Как правильно это сделать?

Ответы [ 6 ]

83 голосов
/ 09 февраля 2011

У меня была такая же проблема раньше. Поскольку nginx не может выполнять сложные условия или вложенные операторы if, вам нужно вычислить более 2 различных выражений.

установить переменную в какое-то двоичное значение, а затем включить, если любое из условий истинно в 2 различных операторах if:

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;
}   
21 голосов
/ 29 января 2011

Правильный способ будет использовать выделенный сервер для перенаправления:

server {
  server_name domain.com domain2.com;
  rewrite ^ http://www.domain.com$request_uri? permanent;
}
5 голосов
/ 30 октября 2014

Вот декларативный подход:

server {
    listen       80;
    server_name  domain.com domain2.com;
    return 301 $scheme://www.domain.com$uri;    
}

server {
    listen       80  default_server;
    server_name  _;
    #....
}
5 голосов
/ 03 октября 2012

другая возможность будет

server_name domain.com domain2.com;
set $wanted_domain_name domain.com;
if ($http_host != $wanted_domain_name) {
    rewrite  ^(.*)$  https://$wanted_domain_name$1;
}

, поэтому он будет перенаправлять все на один конкретный, но он основан на сценарии использования, я думаю,

4 голосов
/ 28 января 2014

Перезапись нескольких доменов в один домен и избежание зацикливания в браузере.

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;
    }
1 голос
/ 04 августа 2017

Я думаю, что самый простой способ сделать это, это просто использовать регулярные выражения:

if ($host ~ "domain.com|domain2.com") {
    rewrite ^/(.*)$ http://www.example.com/$1 permanent;
}

Но это хорошо, только когда у вас есть только строки;для сложной логики, конечно, это не правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...