0基础自学linux运维-1.7-手机访问www自动从pc版跳转到手机版

需求:

当移动设备用户访问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 / {

    }

....

}

你可能感兴趣的:(0基础自学linux运维-1.7-手机访问www自动从pc版跳转到手机版)