Nginx使用rewrite根域名重定向到www二级域名

将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址(例如:将csdn.com显性转发到www.csdn.com后,访问csdn.com时,地址栏显示的地址为:www.csdn.com)。

将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址(例如:将csdn.com显性转发到www.csdn.com后,访问csdn.com时,地址栏显示的地址为:www.csdn.com)。

分两种情况:

第一种情况是前后台域名分开的情况,即前后台都使用80默认端口

例如:前端域名使用根域名a.com和 www.a.com  ;后端域名使用根域名b.com和 www.b.com 

这种情况,用户访问a.com 重定向到 www.a.com 或 用户访问b.com 重定向到 www.b.com 可以使用下面配置nginx

1、前端配置

1.1、所有非www二级域名都跳转到www.a.com下去。

#所有非www.a.com开始的域名,都重定向到www.a.com下去。

if ($http_host !~ "^www.a.com$") {

    rewrite  ^(.*)    http://www.a.com$1 permanent;

}

1.2、一级域名跳转到www二级域名下面去。

#只是一级域名“a.com” 跳转到www.a.com去。

if ($http_host ~ "^a.com$") {

    rewrite  ^(.*)    http://www.a.com$1 permanent;

}

2、后端配置

2.1、所有非www二级域名都跳转到www.b.com下去。

#所有非www.b.com开始的域名,都重定向到www.b.com下去。

if ($http_host !~ "^www.b.com$") {

    rewrite  ^(.*)    http://www.b.com$1 permanent;

}

2.2、一级域名跳转到www二级域名下面去。

#只是一级域名“b.com” 跳转到www.b.com去。

if ($http_host ~ "^b.com$") {

    rewrite  ^(.*)    http://www.b.com$1 permanent;

}

第二种情况是前后台都使用同一个根域名和二级域名,即前端使用80默认端口,后端使非80默认端,如后端使用8088端口

例如:前端的后端同时使用根域名a.com和二级域名www.a.com

方案是先判断域名同时判断是服务端使用的端口来确定重写向到前端还是后端

1、前端配置

1.1、所有非www二级域名都跳转到www.a.com下去。

 set $flag 0;

 if ($http_host !~ "^www.a.com$") {

     set $flag "${flag}1";

 }

 if ($SERVER_PORT  ~ "80") {

        set $flag "${flag}2";

  }

  if ($flag = "012") {

        rewrite  ^(.*)  http://www.a.com$1 permanent;

  }

1.2、一级域名跳转到www二级域名下面去。

  #根域名重定向到二级域名www

    set $flag 0;

    if ($host ~ "^a.com$") {

       set $flag "${flag}1";

    }

    if ($SERVER_PORT  ~ "80") {

        set $flag "${flag}2";

    }

    if ($flag = "012") {

        rewrite  ^(.*)  http://www.a.com$1 permanent;

    }

2、后端配置

1.2、一级域名跳转到www二级域名下面去。

1.1、所有非www二级域名都跳转到www.a.com下去。

 set $flag 0;

 if ($http_host !~ "^www.a.com$") {

     set $flag "${flag}1";

 }

 if ($SERVER_PORT  ~ "8099") {

        set $flag "${flag}2";

  }

  if ($flag = "012") {

      rewrite  ^(.*)  http://www.a.com:8099$1 permanent;

  }

#根域名重定向到二级域名www

    set $flag 0;

    if ($host ~ "^acom$") {

       set $flag "${flag}1";

    }

    if ($SERVER_PORT  ~ "8099") {

        set $flag "${flag}2";

    }

    if ($flag = "012") {

        rewrite  ^(.*)  http://www.a.com:8099$1 permanent;

    }