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 相关文章推荐
nginx常用命令放入shell脚本详解
Mar 31 Servers
Nginx配置https原理及实现过程详解
Mar 31 Servers
Nginx 根据URL带的参数转发的实现
Apr 01 Servers
关于Nginx中虚拟主机的一些冷门知识小结
Mar 03 Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 Servers
Nginx配置根据url参数重定向
Apr 11 Servers
Nginx反向代理、重定向
Apr 13 Servers
Nginx 安装SSL证书完成HTTPS部署
Apr 28 Servers
排查Tomcat进程假死的问题
May 06 Servers
Nginx配置使用详解
Jul 07 Servers
nginx访问报403错误的几种情况详解
Jul 23 Servers
Flink 侧流输出源码示例解析
Sep 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
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
Mootools 1.2教程 事件处理
2009/09/15 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
js查错流程归纳
2012/05/04 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
详解uniapp的全局变量实现方式
2021/01/11 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
对Python中内置异常层次结构详解
2018/10/18 Python
python装饰器练习题及答案
2019/11/01 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
美国电视购物:QVC
2017/02/06 全球购物
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
倡议书的写法
2014/08/30 职场文书
社团个人总结范文
2015/03/05 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python
python利用while求100内的整数和方式
2021/11/07 Python