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设置日志打印post请求参数的方法
Mar 31 Servers
Nginx 过滤静态资源文件的访问日志的实现
Mar 31 Servers
apache基于端口创建虚拟主机的示例
Apr 24 Servers
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
Sep 25 Servers
nginx常用配置conf的示例代码详解
Mar 21 Servers
Apache Hudi集成Spark SQL操作hide表
Mar 31 Servers
docker compose 部署 golang 的 Athens 私有代理问题
Apr 28 Servers
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
Jun 10 Servers
win sever 2022如何占用操作主机角色
Jun 25 Servers
git stash(储藏)的用法总结
Jun 25 Servers
Nginx跨域问题解析与解决
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
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
jquery 弹出层实现代码
2009/10/30 Javascript
怎么清空javascript数组
2013/05/11 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
Python多线程实现同步的四种方式
2017/05/02 Python
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
python实现名片管理系统项目
2019/04/26 Python
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
英国家用电器购物网站:Hughes
2018/02/23 全球购物
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
学校爱心捐款倡议书
2014/05/13 职场文书
党员承诺书格式
2014/05/21 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
缓刑期间思想汇报范文
2014/10/10 职场文书
未中标通知书
2015/04/17 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python