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 中的两种限流方式
Mar 31 Servers
详解Nginx 工作原理
Mar 31 Servers
Nginx反向代理及负载均衡如何实现(基于linux)
Mar 31 Servers
Nginx URL重写rewrite机制原理及使用实例
Apr 01 Servers
Nginx进程调度问题详解
Sep 25 Servers
Nginx 反向代理解决跨域问题多种情况分析
Jan 18 Servers
CentOS安装Nginx并部署vue
Apr 12 Servers
nginx搭建NFS网络文件系统
Apr 14 Servers
阿里云ECS云服务器快照的概念以及如何使用
Apr 21 Servers
Windows server 2022创建创建林、域树、子域的步骤
Jun 25 Servers
nginx静态资源的服务器配置方法
Jul 07 Servers
Windows Server 2012 R2服务器安装与配置的完整步骤
Jul 15 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
PHP服务器页面间跳转实现方法
2012/08/02 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
浅析JQuery UI Dialog的样式设置问题
2013/12/18 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
Javascript中arguments和arguments.callee的区别浅析
2015/04/24 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法
2019/02/21 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
python实现感知器算法详解
2017/12/19 Python
使用python存储网页上的图片实例
2018/05/22 Python
对python中的高效迭代器函数详解
2018/10/18 Python
Python3简单实现串口通信的方法
2019/06/12 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
python+OpenCV实现图像拼接
2020/03/05 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
华润集团网上药店:健一网
2016/09/19 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
中专毕业生个人职业生涯规划
2014/02/19 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
校园安全广播稿范文
2014/09/25 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle
详解Python为什么不用设计模式
2021/06/24 Python