Я хочу перенаправить запросы на два условия, используя nginx.
Это не работает:
if ($host = 'domain.com' || $host = 'domain2.com'){
rewrite ^/(.*)$ http://www.domain.com/$1 permanent;
}
Каков правильный способ сделать это?
Я хочу перенаправить запросы на два условия, используя nginx.
Это не работает:
if ($host = 'domain.com' || $host = 'domain2.com'){
rewrite ^/(.*)$ http://www.domain.com/$1 permanent;
}
Каков правильный способ сделать это?
У меня была такая же проблема раньше. Поскольку nginx не может выполнять сложные условия или вложенные операторы if, вам необходимо оценить более двух разных выражений.
установите переменную в какое-то двоичное значение, затем включите, если любое условие истинно в двух разных операторах 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;
}
Правильный способ - использовать выделенный сервер для перенаправления:
server {
server_name domain.com domain2.com;
rewrite ^ http://www.domain.com$request_uri? permanent;
}
другая возможность была бы
server_name domain.com domain2.com;
set $wanted_domain_name domain.com;
if ($http_host != $wanted_domain_name) {
rewrite ^(.*)$ https://$wanted_domain_name$1;
}
поэтому он перенаправляет все на один конкретный, но на основе пользовательского кода, который я предполагаю
Здесь декларативный подход:
server {
listen 80;
server_name domain.com domain2.com;
return 301 $scheme://www.domain.com$uri;
}
server {
listen 80 default_server;
server_name _;
#....
}
Переписывание нескольких доменов в один домен и исключение условия цикла в браузере.
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;
}
Я думаю, что самый простой способ сделать это - просто использовать регулярное выражение:
if ($host ~ "domain.com|domain2.com") {
rewrite ^/(.*)$ http://www.example.com/$1 permanent;
}
Но это хорошо только тогда, когда у вас есть только строки; для сложной логики, конечно, это неверно.