nginx.conf redirect multiple conditions
I want to redirect requests on two conditions using nginx.
This doesn't work:
if ($host = 'domain.com' || $host = 'domain2.com'){
rewrite ^/(.*)$ http://www.domain.com/$1 permanent;
}
What is the correct way to do this?
Solution 1:
I had this same problem before. Because nginx can't do complex conditions or nested if statements, you need to evaluate over 2 different expressions.
set a variable to some binary value then enable if either condition is true in 2 different if statements:
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;
}
Solution 2:
The correct way would be to use a dedicated server for the redirect:
server {
server_name domain.com domain2.com;
rewrite ^ http://www.domain.com$request_uri? permanent;
}
Solution 3:
another possibility would be
server_name domain.com domain2.com;
set $wanted_domain_name domain.com;
if ($http_host != $wanted_domain_name) {
rewrite ^(.*)$ https://$wanted_domain_name$1;
}
so it will redirect all to one specific but it's based on the usecase i guess
Solution 4:
Here's a declarative approach:
server {
listen 80;
server_name domain.com domain2.com;
return 301 $scheme://www.domain.com$uri;
}
server {
listen 80 default_server;
server_name _;
#....
}