nginx多重条件判断

问题描述

一个网站绑定两个域名访问(123.com abc.com),然后又涉及一个跳转问题(123.com到www.123.com abc.com到www.abc.com)以及http跳到https

PC端Server段的配置:

set $flag 0;
if ($scheme = http) {

 set $flag "${flag}1";

}

if ($host = 'www.123.com') {

set $flag "${flag}1";
}


if ($host = 'www.abc.com'){

set $flag "${flag}0";

}

if ($flag ="011"){
 return 301 https://www.123.com$request_uri;
}

if ($flag ="010"){
 return 301 https://www.abc.com$request_uri;
}

移动端server内的配置:

set $flag 0;
if ($scheme = http) {

 set $flag "${flag}1";

}

if ($host = 'm.123.com') {

set $flag "${flag}1";
}


if ($host = 'm.abc.com'){

set $flag "${flag}0";

}

if ($flag ="011"){
 return 301 https://m.123.com$request_uri;
}

if ($flag ="010"){
 return 301 https://m.abc.com$request_uri;
}

然后检测配置的时候会提示
invalid condition "$flag" in 移动端配置文件

阅读 3.7k
1 个回答
  1. 调试配置时跳转建议先写成302,否则客户端清理缓存时会很麻烦,而且容易产生误导;
  2. 没看懂配置的逻辑。如果只是xxx.com跳转www.xxx.com,可以直接在DNS解析时就CNAME过去(无MX规则时),或者用URL跳转,这样nginx只需要处理http跳转https(CNAME方案)就可以了,后者甚至连这个也不用搞;
  3. 移动端跳转,判断下uA然后根据条件跳转就行了。这个似乎不用单独分出来一个配置文件吧……另外也不建议用301,不然什么时候用浏览器调下网页后边就一直移动端了。。。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题