需求:
当移动设备用户访问pc端的www.xxx.com,自动跳到移动版本的m.xxx.com
解决:
这个可以使用rewrite规则去实现,结合if判断,但是nginx不支持if..else,可以变换一个实现这个功能。nginx配置如下:
# 检测是不是手机访问,下面的s1-s4访问不跳转到手机网站的
set $mobile_rewrite p;
if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
set $mobile_rewrite "${mobile_rewrite}p";
}
location / {
# 手机访问PC版页面,则跳转
if ($mobile_rewrite = pp) {
rewrite ^/(.*)$ http://m.xxx.com redirect;
break;
}
}
上面那段配置在
server {
listen 80;
listen 443 ssl;
#ssl on;
server_name www.xxx.com xxx.com;
...
#charset koi8-r;
access_log /www/logs/nginx/xxx.access.log main;
#把location / { }中的root和index放出来
root /www/xxx_com;
index index.html index.htm;
#下面写手机判断
}
需求二
在上面的基础上,当访问http强制转到https,但手机网站访问www.xxx.com直接跳到m.xxx.com而不是先跳到https再跳到m.xxx.com
解决:
可以把80和443分开来配置
server {
listen 80;
server_name www.xxx.com xxx.com;
# 检测是不是手机访问
set $mobile_rewrite p;
if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
set $mobile_rewrite "${mobile_rewrite}p";
}
if ($mobile_rewrite = pp) {
rewrite ^/(.*)$ http://m.xxx.com redirect;
break;
}
#如果不是手机访问强制性跳转到https
if ($mobile_rewrite = p) {
rewrite ^(.*) https://$server_name$1 permanent;
}
}
server {
#listen 80;
listen 443 ssl;
ssl on;
server_name www.xxx.com xxx.com;
#by hua
ssl_certificate /root/.acme.sh/www.xxx.com/www.xxx.com.cer;
ssl_certificate_key /root/.acme.sh/www.xxx.com/www.xxx.com.key;
#charset koi8-r;
access_log /www/logs/nginx/xxx.access.log main;
root /www/xxx_com;
index index.html index.htm;
location / {
}
....
}