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实现反向代理
Sep 20 Servers
Filebeat 采集 Nginx 日志的方法
Mar 31 Servers
nginx的zabbix 5.0安装部署的方法步骤
Jul 16 Servers
使用Nginx搭载rtmp直播服务器的方法
Oct 16 Servers
Apache Hudi 加速传统的批处理模式
Apr 24 Servers
Nginx 常用配置
May 15 Servers
zabbix配置nginx监控的实现
May 25 Servers
云服务器部署 Web 项目的实现步骤
Jun 28 Servers
nginx之queue的具体使用
Jun 28 Servers
彻底卸载VMware虚拟机的超详细步骤记录
Jul 15 Servers
Nginx报错104:Connection reset by peer问题的解决及分析
Jul 23 Servers
Windows7下FTP搭建图文教程
Aug 05 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
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
JavaScript 对象、函数和继承
2009/07/07 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
python从sqlite读取并显示数据的方法
2015/05/08 Python
Python logging设置和logger解析
2019/08/28 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
Python jieba库用法及实例解析
2019/11/04 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
了解AppleTalk协议吗
2014/04/01 面试题
初任培训自我鉴定
2013/10/07 职场文书
会计电算化专业毕业生自荐信
2013/12/20 职场文书
人事专员工作职责
2014/02/22 职场文书
总经理任命书
2014/03/29 职场文书
干部培训工作总结2015
2015/05/25 职场文书
简爱读书笔记
2015/06/26 职场文书