当前位置:首页 > 技术文章 > 正文内容

使用 Nginx 实现 URL 的重定向

arlanguage4个月前 (01-07)技术文章31

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

3. 综述

今天聊了一下 使用 Nginx 实现 URL 的重定向,希望可以对大家的工作有所帮助

作者:追风人聊Java

原文链接:https://www.cnblogs.com/w84422/p/16127552.html

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/673.html

标签: nginx agent
分享给朋友:

“使用 Nginx 实现 URL 的重定向” 的相关文章

Python WSGI 高性能服务器 - Gunicorn 简介

一、简介Gunicorn 意即 Green Unicorn,绿色独角兽。它是一个被广泛使用的高性能的 Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目。它具有如下特性:原生支持 WSGI、Django 和 Paster自动工作进程管理简单的 Pytho...

轻松搭建基于 Serverless 的 ThinkPHP 应用

ThinkPHP 是什么?ThinkPHP 是一个免费开源的,快速、简单的面向对象的轻量级 PHP 开发框架,是为了敏捷 WEB 应用开发和简化企业应用开发而诞生的。ThinkPHP 从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,更注重易用性。遵循 Apache2 开源许可...

Nginx 如何代理转发传递真实 ip 地址?

Nginx 是一个高性能的反向代理服务器,也是一个非常流行的负载均衡器和 HTTP 缓存。其轻量级的设计和高并发处理能力使得它广泛应用于各种 Web 服务中。在使用 Nginx 作为反向代理服务器时,一个常见的问题是如何在代理转发过程中传递客户端的真实 IP 地址。默认情况下,Nginx 会将客户端...

Nginx - 调优 nginx怎么优化

worker调优worker是Nginx的进程,一个worker理论上可以处理几万个请求,为了更好利用Nginx的缓存机制,让worker运行在固定的CPU上,从而减少worker切换CPU时造成的性能消耗。worker的数量并不是越多越好,worker的数量一般配制与物理CPU的物理核心数相同。C...

「自动化运维」从0到1 CICD自动化部署落地分享

?目录一、CICD简介二、CICD实践过程三、含泪踩坑四、历史文章指路一、CICD简介1、CICD定义Continuous Integration (CI) 持续集成Continuous Delivery (CD) 持续交付Continuous Deployment (CD) 持续部署2、DevOp...

现代配置指南——YAML 比 JSON 高级在哪

一直以来,前端工程中的配置大多都是 .js 文件或者 .json 文件,最常见的比如:package.jsonbabel.config.jswebpack.config.js这些配置对前端非常友好,因为都是我们熟悉的 JS 对象结构。一般静态化的配置会选择 json 文件,而动态化的配置,涉及到引入...