Nginx移动端和PC端返回不同页面内容且不影响的URL的处理方法

发布于 27 天前  41 次阅读


一个项目,前端单独给移动端和pc端写了不同的页面,并且设置了两个文件夹,pc/mobile

但是url需要保持不变,叫前端写个js判断一下,前端回复说,这样影响效率,nginx判断比较快

然后就开始了nginx配置之路

毫无撤退可言

要求:保持URL不变,nginx判断移动端和PC端 返回不同文件夹中的内容

实现在url不变的情况下 PC访问展示PC页面的内容,手机访问展示手机的页面

 

 

刚开始想着用if来判断用的用户的代UA    ,alias  指定不同的目录

(注意:这种写法是错误的)

location /pay/ {
 
if ( $http_user_agent ~ "(iPhone)|(Android)" ){
        alias /www/pay/mobile/;
}

 

然后执行   nginx -t    报错

nginx: [emerg] "alias" directive is not allowed here in /etc/nginx/nginx.conf:35

关于if的各种坑,可以查看 https://xwsoul.com/posts/761?tdsourcetag=s_pctim_aiomsg
感觉写的还不错

然后咨询和讨论得到两种解决方法

  1. 通过 rewrite 和 location 做两次处理
  2. 通过 if 内嵌变量,然后把用alias+变量的方法间接处理

上代码

方案一

    location ~ ^/pay(/.*) {
    set $way $1;
            if ( $http_user_agent ~ "(mobile|Nokia|samsung|LG|blackberry|htc|Android|iPhone|Windows Phone|UC|Kindle)" ){
        rewrite ^ paywap$way;
    }
}

location paywap/ {
    internal;
    alias /www/mobile/;
}

方案二

location /pay/ {
set $getdir "/home/www/pay/";
            if ( $http_user_agent ~ "(mobile|Nokia|samsung|LG|blackberry|htc|Android|iPhone|Windows Phone|UC|Kindle)" ){
        set $getdir "/home/www/pay/mobile/";
    }
alias $getdir;
}

测试成功


因为喜欢所以折腾。。。