一个项目,前端单独给移动端和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
感觉写的还不错
然后咨询和讨论得到两种解决方法
- 通过 rewrite 和 location 做两次处理
- 通过 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;
}
测试成功