项目场景:
移动端访问Pc站,由nginx实现自动跳转
问题描述
使用移动端访问,并未实现跳转
server {
listen 12700;
server_name 127.0.0.1;
## rewrite
rewrite ^/$ /a last;
## 变量
set $to_mobile 'https://m.xx.cn';
location /a {
if ($to_mobile != '') {
return 200 "[1] --- $to_mobile";
}
return 200 "[2] --- $to_mobile";
}
}
原因分析:
1.移动端访问“/a",返回[1],结果ok;
2.移动端访问“/”,返回[2],与预期不一致。
二者的区别在于是否rewrite,按测试结果分析,可以得出结论:
rewrite后并不会执行下面的set代码块,而是直接匹配location
解决方案:
将set代码块,放在location下,如:
location /a {
## 变量
set $to_mobile 'https://m.xx.cn';
if ($to_mobile != '') {
return 200 "[1] --- $to_mobile";
}
return 200 "[2] --- $to_mobile";
}
实际项目中,一般有多个location,可以将set代码块写在单独的文件中,通过include引入,如:
to_mobile.conf
set $to_mobile 'https://m.xx.cn';
nginx.conf
location /a {
## 变量
include to_mobile.conf;
...
}