nginx.conf redirect multiple conditions

前端 未结 6 1816
傲寒
傲寒 2021-01-30 03:46

I want to redirect requests on two conditions using nginx.

This doesn\'t work:

  if ($host = \'domain.com\' || $host = \'domain2.com\'){
    rewrite ^/(         


        
相关标签:
6条回答
  • 2021-01-30 04:23

    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;
    }
    
    0 讨论(0)
  • 2021-01-30 04:24

    I think the easiest way to do it it's just use regular expression:

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

    But it's good only when you have only strings; for complex logic, sure, it is not correct.

    0 讨论(0)
  • 2021-01-30 04:35

    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  _;
        #....
    }
    
    0 讨论(0)
  • 2021-01-30 04:36

    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;
    }   
    
    0 讨论(0)
  • 2021-01-30 04:37

    Rewriting multiple domains to a single domain and avoiding a looping condition in the browser.

    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;
        }
    
    0 讨论(0)
  • 2021-01-30 04:44

    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

    0 讨论(0)
提交回复
热议问题