Nginx重写跳转

news2024/11/14 15:32:33

目录

一、rewrite跳转场景

二、rewrite跳转实现

三、rewrite实际场景

四、rewrite正则表达式

五、rewrite命令语法格式

六、location分类

1、location 大致可以分为三类

2、正则匹配的常用表达式

七、location 优先级

八、rewrite和location比较

九、总结


一、rewrite跳转场景

Rewrite 跳转场景主要包括以下几种:

1、可以调整用户浏览的 URL,看起来更规范,合乎开发及产品人员的需求

2、为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态 URL 地址伪装成静态地址提供服务

3、网址换新域名后,让旧的访问跳转到新的域名上。

4、服务端某些业务调整

二、rewrite跳转实现

Nginx 是通过 ngx_http_rewrite_module 模块支持 url 重写、支持 if 条件判断,但不支持else。

另外该模块需要 PCRE 支持,应在编译 Nginx 时指定 PCRE 支持,默认已经安装。

根据相关变量重定向和选择不同的配置,从一个 location 跳转到另一个 location,不过这样 的循环最多可以执行 10 次,超过后 Nginx 将返回 500 错误。

同时,重写模块包含 set 指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。

三、rewrite实际场景

1、Nginx跳转需求的实现方式

使用rewrite进行匹配跳转

使用if匹配全局变量后跳转。Nginx服务本身全局变量

使用location匹配再跳转。匹配的访问URL路径,location可以匹配本地重写以及跨服务器跳转

2、rewrite放在server{}、if{}、location{}段中

location只对域名后面的除去传递参数外的字符串起作用:www.baidu.com/.......

3、对域名或参数字符串

使用if全局变量匹配

使用proxy pass反向代理

四、rewrite正则表达式

^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“$”则匹配“$”
\d :匹配纯数字
\s :匹配空的(空格或者制表符)
{n} :重复 n 次
{n,} :重复 n 次或更多次
{n,m} :重复 n 到 m 次
[ ] :定义匹配的字符范围
[c] :匹配单个字符 c
[a-z] :匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] :匹配所有大小写字母或数字
() :表达式的开始和结束位置
| :或运算符

五、rewrite命令语法格式

rewrite        <regex>        <replacement>        [flag];

                      正则            跳转后的内容         rewrite支持的flag标记

last相当于Apache的[L]标记,表示完成rewrite
break本条规则匹配完即终止,不再匹配后面的任何规则,一般在location中使用
redirect

返回302临时重定向,浏览器地址栏会显示跳转后的URL地址,爬虫不会更新URL

permanent返回301临时重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新URL

last:在本条规则完成后,继续向下匹配新的locationURL规则,一般用在server和if当中

break:跟last相似,但是不会重新发起一次处理过程,而是直接返回处理结果

redirect:该标记表示当前规则匹配成功后立即进行重定向操作

permanent:该标记和redirect类似,但是永久性重定向

set:标记表示当前规则匹配成功设置下一个变量,并把变量传入下一条规则

lastbreak
使用场景一般写在server和if中一般使用在location中
URL匹配不终止重写后的URL匹配,还可以继续下一次终止重写后的URL匹配,直接跳出

六、location分类

1、location 大致可以分为三类

①精准匹配:location = / {}

②一般匹配:location / {}

③正则匹配:location ~ / {}

2、正则匹配的常用表达式

标记说明
~执行一个正则匹配,区分大小写
~*执行一个正则匹配,不区分大小写
!~执行一个正则匹配,区分大小写不匹配(取非)
!~*执行一个正则匹配,不区分大小写不匹配(取非)
^~普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location
=普通字符精确匹配,也就是完全匹配
@定义一个命名的location,使用在内部定向时

七、location 优先级

首先精确匹配 =

其次前缀匹配 ^~

其次是按文件中顺序的正则匹配 ~或~*

然后匹配不带任何修饰的前缀匹配

最后是交给 / 通用匹配

精确>前缀>正则>一般>通用

优先级相同:正则看上下顺序,上面的优先,一般匹配看长度,最长匹配的优先,精确,前缀,正则,一般都没有匹配到,最后再看通用匹配,一般匹配。

八、rewrite和location比较

相同点:都能实现跳转

不同点:rewrite是在同一域名内更改资源获取的路径

location是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器,对一类地址进行权限控制(认证控制)+跳转(跨服务器进行URL跳转)

九、总结

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。
比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9 HAL库驱动框架简述(STM32HAL库)

目录 HAL库驱动框架简述 HAL库外设设计思想 HAL库和Cube MX相结合 一、对外设的封装——句柄结构体 二、外设初始化 初始化结构体 初始化的逻辑 三、外设使用逻辑 通用接口函数 初始化函数 I/O操作函数 控制函数 状态参数 扩展接口函数 总结 补充&#xff1a;H…

如何以最小成本通过CMMI评估?评估调查问卷收集中

CMMI评估&#xff0c;我们经常遇到&#xff1a;评估费用高、时间长&#xff0c;CMMI标准过程无法高效落地&#xff0c;那么我们如何以最小的成本通过CMMI评估&#xff1f; CoCode开发云公益直播课即将开播&#xff01;直播主题&#xff1a;如何以最小成本通过CMMI评估。为了更好…

怎么把文字生成图片?三款ai绘画生成器分享

如果你对ai绘画工具有一定了解的话&#xff0c;你就会知道&#xff1a;市面上大部分ai绘画工具都是收费。再退一步讲&#xff0c;我们暂且不论收费价格的高低&#xff0c;大多数收费的ai绘画工具也不一定能准确匹配我们的需求。 仅仅在学生党和工作党之间&#xff0c;对ai绘画…

python爬虫增加多线程获取数据

Python爬虫应用领域广泛&#xff0c;并且在数据爬取领域处于霸主位置&#xff0c;并且拥有很多性能好的框架&#xff0c;像Scrapy、Request、BeautifuSoap、urlib等框架可以实现爬行自如的功能&#xff0c;只要有能爬取的数据&#xff0c;Python爬虫均可实现。数据信息采集离不…

windows10教育版过期,记录一下重装windows11专业工作站。报错“若要在此计算机上安装windows,请重新启动安装”

准确的来说是重装 windows10或者windows11都有问题&#xff0c;而且卡了很久&#xff1b;最初的问题是 第一步解决问题的方法&#xff1a; 1、修改注册文件&#xff1a; 有些不显示鼠标&#xff0c;记住鼠标按住拖动&#xff0c;这样可以看见矩形的样子&#xff0c;可以知道大…

shardingsphere-proxy 搭建mysql的分库分表

1、docker安装mysql5.7版本 拉取mysql的镜像 docker pull mysql:5.7创建mysql的配置目录&#xff0c;日志目录&#xff0c;数据存储的目录 mkdir -p /home/sunyuhua/docker/mysql/conf mkdir -p /home/sunyuhua/docker/mysql/logs mkdir -p /home/sunyuhua/docker/mysql/dat…

服务器日志处理,文件截取关键字

临近年中述职&#xff0c;需要各种量化参数&#xff0c;服务稳定性是上半年的重中之重&#xff0c;所以需要重点列出说服性指标&#xff0c;因此各种错误吗的统计信息便是重要信息&#xff0c;因为公司的日志采集系统因上云缘故&#xff0c;导致历史数据丢失没法查询&#xff0…

Jetpack Compose实现 验证码输入框

highlight: androidstudio Jetpack Compose 作为 Android 的新一代 UI 开发框架,提供了非常强大的工具来构建用户界面。 今天,我们就利用 Compose 来实现一个炫酷的验证码输入框! 开始的思路是用6个TextField来实现 // 用于存储验证码的长度 val codeLength 6 // 定义一个…

Cesium 实战 - 使用 gltf-vscode 查看、预览以及编辑 glTF 和 GLB 模型

Cesium 实战 - 使用 gltf-vscode 查看、预览以及编辑 glTF 和 GLB 模型 VScode&#xff08;Visual Studio Code&#xff09; 安装模型必要插件VScode 预览自定义关节&#xff08;articulations&#xff09;动作VScode 导入 GLB 格式模型VScode 导出 GLB 格式模型 模型渲染作为 …

【什么是iMessage苹果推】怎样来获取设备令牌(Device Token)实现步骤

要获取设备令牌&#xff08;Device Token&#xff09;&#xff0c;您需要在应用程序中实现以下步骤&#xff1a; 在应用程序中请求用户授权&#xff1a;您需要请求用户授权允许应用程序发送远程通知。这可以通过使用 UNUserNotificationCenter&#xff08;User Notifications …

Linux学习之以openresty为例学习源码安装软件

https://github.com/openresty/openresty/tags里边有openresty各个版本的源码。 https://openresty.org/en/是官网。 wget https://github.com/openresty/openresty/archive/refs/tags/v1.15.8.1.tar.gz(github网址)或者wget https://openresty.org/download/openresty-1.15.…

6月29日第壹简报,星期四,农历五月十二

6月29日第壹简报&#xff0c;星期四&#xff0c;农历五月十二&#xff0c;早安&#xff01;坚持阅读&#xff0c;静待花开1. 中国移动元宇宙产业联盟成立&#xff0c;科大讯飞、华为、小米等为首批成员。2. 离岸人民币兑美元跌破7.25关口&#xff0c;创去年11月末来低位。3. 成…

STC89C52与LCD1602液晶显示的软硬件仿真

STC89C52与LCD1602液晶显示的软硬件仿真 硬件仿真平台&#xff1a;protues8.13 软件仿真平台&#xff1a;keil5 硬件连接图&#xff1a; 软件代码实现&#xff1a; &#xff08;复制后 粘贴到keil5中&#xff0c;即可使用&#xff0c;无需修改&#xff09; #include <RE…

SpringCloud-Nacos注册中心

文章目录 Nacos注册中心服务注册到nacos1&#xff09;引入依赖2&#xff09;配置nacos地址3&#xff09;重启 5.3.服务分级存储模型给user-service配置集群同集群优先的负载均衡 权重配置环境隔离创建namespace给微服务配置namespace Nacos与Eureka的区别 Nacos注册中心 服务注…

v8-tc39-ecma262: at,代替“arr[0]“取值

首先是语义化 其次是函数式&#xff0c;意味着加入流式调用队列 如上图&#xff0c;解释如下&#xff1a; 对象&#xff0c;调用对象函数处理类数组&#xff0c;调用类数组处理关联下标&#xff1f;转为Integer或者Infinity类型如果下标的值大于等于0&#xff0c;则设置赋值给…

Windows 驱动开发环境搭建

Windows 驱动开发环境搭建及 windbg 调试工具安装使用 引言了解 Windows 驱动开发环境下载 Windows 驱动开发环境根据需要下载安装对应版本的 Visual Studio下载安装对应的 WDK 工具包 编写第一个驱动代码总结参考资料 引言 对于 Windows 驱动开发&#xff0c;在微软官方的文档…

go定时任务crontab

在linux里可以通过crontab -e或者vi /etc/crontab编辑定时任务&#xff0c;区别在于后者只有root用户可以&#xff0c;还可以指定shell环境&#xff0c;不建议修改&#xff0c;修改前建议备份&#xff0c;前者任何用户都可以使用&#xff0c;两者修改后都不用修改自动重启。 1…

尚无忧宠物托运小程序app源码前景如何?

宠物托运市场调研分析 由于宠物托运在交通运输中并不是一个很大的类目&#xff0c;行业尚缺乏标准的流程规范与相关的监管机制&#xff0c;目前我国市面上常见的三方宠物托运公司多无正规手续&#xff0c;更有多数公司不具备相关运输资质。 如今&#xff0c;宠物经济不断崛起…

Linux:安装tomcat

注意&#xff1a;1.安装tomcat时最好用非root用户安装 2.可以选择新建一个用户&#xff0c;用户安装部署tomcat&#xff0c;本文将继续用fovace账户进行tomcat安装 一、前置条件 安装tomcat需要先安装jdk&#xff0c;所以先确定系统中是否已经有jdk&#xff0c;如下&#xff1a…

Minecraft-生成运行Spigot服务端

一、安装 先下载一个.jar的服务端核心&#xff0c;选择自己需要的版本 spigot核心下载 二、配置 下载完后&#xff0c;创建一个.bat批处理文件 内容填写如下&#xff0c;xxx.jar是你下载的核心名称 -Xms1G表示服务器所使用的最低运行内存为1G -Xmx1G表示服务器所使用的最高运行…