Nginx配置根据url参数重定向


Posted in Servers onApril 11, 2022

1. 概述

老话说的好:取乎上,得其中;取乎中,得其下。因此我们不妨把目标定的高一些,去努力,才能得到更好回报。

言归正传,今天我们来聊聊 使用 Nginx 实现 URL 的重定向。

2. 使用 Nginx 实现 URL 的重定向

2.1 使用场景

我们日常分享一个网站地址时,常常会有这样的效果,同样一个网址,在电脑的浏览器打开,是一种效果,而在手机的浏览器打开,就会展现出另一种更适合手机显示的效果。

通常要达到这样的效果,有两种方式实现:

一、使用自适应的 H5 页面实现,根据窗口宽度的大小,自动调整页面的布局。

二、使用Nginx,依据终端的不同,跳转到不同的页面,电脑打开,跳转到 PC端 使用的网页,手机打开,跳转到 手机端 使用的网页。

今天我们介绍一下第二种方式,是如何实现的。

2.2 单纯的重定向

有些 URL 的重定向,新 URL 不需要继承原 URL 的参数,例如 网站首页,这种情况,在 Nginx 配置文件的 location 中使用 return 302 的方式进行跳转即可。

location / {
        # 判断是否是移动端
        if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
        {
            return 302 https://www.zhuifengren.com/h5/index.html;
        }
 
        proxy_pass http://myUpstream;
 }

2.3 依据原 URL 重定向

另一种情况就是 新 URL 需要继承原 URL 的参数,这种情况就需要使用  rewrite 对 URL 进行改写。

location / {
        # 判断是否是移动端
        if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
        {
            rewrite (\w+-\w+)|(\?.*)$ https://www.zhuifengren.com/h5-$1-0.html$2 redirect;        
        }    
 
        proxy_pass http://myUpstream;
}

rewrite 的语法是: rewrite  正则表达式  改写后的URL  redirect;

其中 redirect 是 302 临时重定向的意思,也可以使用 permanent 关键字,代表 301 永久重定向。

使用 rewrite 对 URL 进行改写,需要用到 正则表达式 的知识,改写后 URL 中的 $1、$2 代表正则表达式中匹配的第一个字符串和第二个字符串,这里大家可以去了解一下正则表达式,就不细说了。

例子中的正则表达式 (\w+-\w+)|(\?.*)$,可以将原 URL:

https://www.zhuifengren.com/1001-1223.jsp?v=123456

改写为

https://www.zhuifengren.com/h5-1001-1223-0.html?v=123456

补充:Nginx根据url参数重定向

1.判断url路径

location / {
    if ($args ~* "/product-list?param1=val1&param2=val2") {
        rewrite ^ http://www.mysite.com/product-list/$arg_param1/$arg_param2? last;
    }
}

2. 判断url参数

if ($arg_path = 'abc'){
	proxy_pass http://127.0.0.1/abc/$arg_path;
}

特别注意if is evil,nginx不提供多if判断,没有or这样的判断,所以只能用下文这种方式。

location /api/ {
        if ($arg_token = '') {
        	proxy_pass http://127.0.0.1/abc
        }
        if ($http_token = '') {
             proxy_pass http://127.0.0.2/abc
        }
        if ($token = paraheader) {
        	 proxy_pass http://127.0.0.3/abc
        }
        proxy_pass http://127.0.0.1:8080/app/;
        proxy_redirect off;
    }
Servers 相关文章推荐
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
Jun 21 Servers
nginx优化的六点方法
Mar 31 Servers
Nginx已编译的nginx-添加新模块
Apr 01 Servers
Nginx URL重写rewrite机制原理及使用实例
Apr 01 Servers
nginx的zabbix 5.0安装部署的方法步骤
Jul 16 Servers
nginx实现动静分离的方法示例
Nov 07 Servers
Nginx中使用Lua脚本与图片的缩略图处理的实现
Mar 18 Servers
为Centos安装指定版本的Docker
Apr 01 Servers
讨论nginx location 顺序问题
May 30 Servers
openEuler 搭建java开发环境的详细过程
Jun 10 Servers
Windows Server 2022 超融合部署(图文教程)
Jun 25 Servers
Nginx如何配置根据路径转发详解
Jul 23 Servers
在Docker容器中部署SQL Server
Apr 11 #Servers
阿里云日志过滤器配置日志服务
阿里云k8s服务升级时502错误 springboot项目应用
Apr 09 #Servers
Consul在linux环境的集群部署
nginx.conf配置文件结构小结
docker-compose部署Yapi的方法
Apr 08 #Servers
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
Apr 07 #Servers
You might like
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
实现树状结构的两种方法
2006/10/09 PHP
php写的AES加密解密类分享
2014/06/20 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
快速入手Python字符编码
2016/08/03 Python
基于python的字节编译详解
2017/09/20 Python
Django进阶之CSRF的解决
2018/08/01 Python
python中的json总结
2018/10/11 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
2020/01/25 Python
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
智能电子应届生求职信
2013/11/10 职场文书
社团招新策划书
2014/02/04 职场文书
大学生毕业求职信
2014/06/12 职场文书
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js