麒麟操作系统服务架构保姆级教程(十)rewrite跳转
如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情
我们访问一个网页的时候会遇到一些奇形怪状的url地址,想优化一下,看着顺眼一点,或者打开一个短视频软件想摸鱼刷一会视频,在打开界面的时候无意间按到了某个位置,欻就跳转到了某东,看着小小说,无意间点到了广告一下就跳过去了,那这个是怎么实现的呢,就用到了今天介绍的——rewrite。
目录
一、rewrite的概念及作用
二、rewrite跳转标记
1、last和break
编辑
编辑
2、临时跳转和永久跳转
三、rewrite跳转案例
1、资源跳转
2、后向引用
3、redirect跳转
四、返回错误页面
💬欢迎交流:在学习过程中如果你有任何疑问或想法,欢迎在评论区留言,我们可以共同探讨学习的内容。你的支持是我持续创作的动力!
👍点赞、收藏与推荐:如果你觉得这篇文章对你有所帮助,请不要忘记点赞、收藏,并分享给更多的小伙伴!你们的鼓励是我不断进步的源泉!
🚀推广给更多人:如果你认为这篇文章对你有帮助,欢迎分享给更多对Linux感兴趣的朋友,让我们一起进步,共同提升!
一、rewrite的概念及作用
1. 基本概念rewrite 功能允许根据特定的规则对客户端请求的 URL 进行修改,然后按照新的 URL 来处理请求。这在很多场景下都有重要作用,比如实现 URL 美化、网站页面迁移后进行旧链接重定向、根据不同条件将请求导向不同的后端服务等。2. 配置语法rewrite 指令的基本语法格式如下:rewrite <regex> <replacement> [flag];<regex>(正则表达式):用于匹配客户端请求的 URL。例如,^/oldpage/(.*)$ 可以匹配以 /oldpage/ 开头的 URL,其中 (.*) 用于捕获后续的字符内容,以便后续在替换字符串中使用。<replacement>:是匹配成功后要替换成的新 URL 内容。比如,如果想把匹配到的 /oldpage/ 相关 URL 重定向到新页面 /newpage/,可以写成 /newpage/$1,这里的 $1 就是引用前面正则表达式中捕获到的内容。[flag](标志位):是可选参数,常用的标志位有以下几种:last:停止当前这一轮的 Nginx 配置中的后续指令处理,重新发起一个对新 URL 的请求查找匹配的 location 等配置块进行处理。break:停止当前这一轮的 Nginx 配置中的后续指令处理,直接使用当前的重写后的 URL 进行后续请求处理,不再重新发起查找等操作。redirect:返回一个临时的 302 重定向给客户端,让客户端去请求新的 URL。permanent:返回一个永久的 301 重定向给客户端,告知客户端资源已永久性迁移到新的 URL 地址,搜索引擎等会根据此更新索引。3. 应用场景URL 美化:例如,将原本带有参数的动态 URL(如 example.com/article.php?id=123)重写成更简洁美观的静态形式(如 example.com/articles/123.html),提升用户体验以及利于搜索引擎优化(SEO)。网站迁移重定向:当网站的页面结构发生变化,旧的页面链接需要指向新的对应页面时,通过 rewrite 可以方便地将旧链接重定向到新的正确链接,避免出现 404 页面,保证用户访问的连贯性和搜索引擎排名不受太大影响。比如原网站的产品页面从 /product?id=1 迁移到了 /products/1,就可以用 rewrite 规则进行重定向。后端服务代理区分:根据请求 URL 的不同特征,利用 rewrite 可以将请求转发到不同的后端服务器群组或者应用服务上。比如,将以 /api/v1 开头的请求转发到一个版本的 API 服务器,而 /api/v2 开头的请求转发到另一个版本的 API 服务器,通过 rewrite 匹配 URL 后修改转发的目标地址来实现。4. 注意事项正则表达式编写要准确,否则可能导致匹配不准确,无法正确重写 URL 或者出现意外的重写情况。合理选择标志位,不同的标志位决定了后续 Nginx 处理请求的流程以及客户端收到的响应形式,使用不当可能会造成循环重定向等问题。测试 rewrite 规则时,要全面检查各种可能的请求情况,确保重写后的 URL 能够被正确处理,不会影响网站的正常运行和用户访问体验。
Nginx 的 rewrite 功能为网站的 URL 管理、请求转发等方面提供了灵活且高效的解决方案,合理运用它能提升网站的性能、用户体验以及维护的便利性。
二、rewrite跳转标记
1、last和break
[root@web01 conf.d]#cat rewrite.conf
server {listen 80;server_name test.yunzhongzi.com;root /code/test/;location / {rewrite /1.html /2.html break; #break 或者lastrewrite /2.html /3.html; }location /2.html {rewrite /2.html /a.html;}location /3.html {rewrite /3.html /b.html;}}
#文件内容:1.html:空2.html:2.html……3.html:3.html……a.html:aaaaaaa……b.html:bbbbbbb……
#文件寻找顺序:访问test.yunzhongzi.com/1.html 跳转到2.html,2跳转3.html,3.html跳转b.html
last 含义: 停止向后匹配,重新对2.html发起请求#三个locartion之间互不影响,在第一个location上写last就是1.html指向2.html指向a.html
break含义: 停止向后匹配,获取2.html中的内容返回给用户,不会重新发起请求。#写入break,1.html跳转2.html,不在向下跳转2.html的内容
2、临时跳转和永久跳转
302 临时跳转: 每次都要请求源站,然后源站返回新的站点给用户,如果源站挂了,无法访问!
使用return 302 http://www.baidu.com 和 rewrite最后的标记 redirect 是一样的功能,都是临时跳转。
[root@web01 conf.d]#cat rewrite.conf
server {listen 80;server_name test.yunzhongzi.com;root /code;location /test {rewrite ^(.*)$ http://www.baidu.com redirect;#rewrite ^(.*)$ http://www.yunzhongzi.com permanent;#return 301 http://www.yunzhongzi.com;#return 302 http://www.baidu.com;}
}
301永久跳转: 只第一次访问源站,第一次往后,直接访问新的站点。
使用return 301 http://www.baidu.com; 和在rewirte后面写premanent相同的含义。
[root@web01 conf.d]#cat rewrite.conf
server {listen 80;server_name test.yunzhongzi.com;root /code;location /test {#rewrite ^(.*)$ http://www.baidu.com redirect;rewrite ^(.*)$ http://www.baidu.com permanent;#return 301 http://www.yunzhongzi.com;#return 302 http://www.baidu.com;}
}
三、rewrite跳转案例
1、资源跳转
用户访问test.yunzhongzi.com/abc ----->/code/ccc/bbb/2.html
[root@web01 conf.d]#vim rewrite.conf
server {listen 80;server_name test.yunzhongzi.com;location / {root /code;index index.html;}location /abc {rewrite ^(.*)$ /ccc/bbb/2.html redirect;#return 302 /ccc/bbb/2.html;}}
[root@web01 conf.d]#mkdir /code/ccc/bbb/ -p
[root@web01 conf.d]#echo /code/ccc/bbb/2.html.... > /code/ccc/bbb/2.html
2、后向引用
通过后项引用,调用用户输入的路径
用户访问的test.yunzhongzi.com/2018/aaa/index.html ----->/code/2014/aaa/index.html[root@web01 conf.d]#cat rewrite.conf
server {listen 80;server_name test.yunzhongzi.com;location / {root /code;index index.html;}location /2018 {rewrite ^/2018/(.*)$ /2014/$1 redirect;}}[root@web01 conf.d]#mkdir /code/2014[root@web01 conf.d]#mkdir /code/2014/aaa[root@web01 conf.d]#echo aaaaaaaaa > /code/2014/aaa/index.html[root@web01 conf.d]#systemctl restart nginx
3、redirect跳转
案例3. 用户访问test.yunzhongzi.com/course-11-22-33.html ------>/code/course/11/22/33/course_33.html[root@web01 conf.d]#cat rewrite.conf
server {listen 80;server_name test.yunzhongzi.com;root /code;index index.html;location / {#灵活配法rewrite ^/course-(.*)-(.*)-(.*).html$ /course/$1/$2/$3/course_$3.html redirect;#固定配法#rewrite ^/course-(.*) /course/11/22/33/course_33.html redirect;}}
[root@web01 conf.d]#systemctl restart nginx
[root@web01 test]#mkdir -p /code/course/11/22/33/
[root@web01 test]#echo "<h1>/code/course/11/22/33/course_33.html</h1>" > /code/course/11/22/33/course_33.html
四、返回错误页面
[root@web01 conf.d]#cat rewrite.conf
server {listen 80;server_name test.yunzhongzi.com;root /code;index index.html;location / {#灵活配法#rewrite ^/course-(.*)-(.*)-(.*).html$ /course/$1/$2/$3/course_$3.html redirect;#固定配法rewrite ^/course-(.*) /course/11/22/33/course_33.html redirect;}error_page 403 404 500 501 502 @error_test;location @error_test {rewrite ^(.*)$ /404.html break;}
}
#案例2.客户端IP地址为10.0.0.1访问test.yunzhongzi.com时,自动在请求行后面加上参数&showoffline=1
[root@web01 conf.d]#cat rewrite.conf
server {listen 80;server_name test.yunzhongzi.com;# $args为Nginx内置变量请求行的参数set $args "&showoffline=1";location / {root /code;index index.html;}if ($remote_addr = 10.0.0.1 ){rewrite (.*) http://test.yunzhongzi.com$1;}
}
案例3.通过变量指定返回给用户的页面
[root@web01 conf.d]#cat rewrite.conf
server {listen 80;server_name test.yunzhongzi.com;root /code/test;charset utf-8,gbk;location / {index index.html;set $ip 0; #设置变量为0if ($remote_addr = "10.0.0.2"){set $ip 1; #如果来源IP为0.1则设置为1}if ($ip = 0){
# 判断如果变量为0 则跳转维护页面
rewrite ^(.*)$ /wh.html break;}}}[root@web01 conf.d]# nginx -t[root@web01 conf.d]# systemctl restart nginx[root@web01 conf.d]#echo 游戏页面维护中... > /code/test/wh.html
今天的rewrite就介绍到这里,明天介绍https加密访问~~~
想成为大佬,就要从小白开始,从0开始,一点一点的积累,慢慢成长,明天你就是大佬!!想学习更多麒麟操作系统的知识,关注小屁,让你成为运维老鸟~~~~~
相关文章:

麒麟操作系统服务架构保姆级教程(十)rewrite跳转
如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 我们访问一个网页的时候会遇到一些奇形怪状的url地址,想优化一下,看着顺眼一点,或者打开一个短视频软件想摸鱼刷一会视频,在打开界面的时候无意间按到…...

MySQL表的创建实验
创建并使用数据库mydb6_product 。 mysql> create database mydb6_product; Query OK, 1 row affected (0.01 sec)mysql> use mydb6_product; Database changed 新建employees表。 对于gender,有默认值意味着不为空,在建表时可以选择不写not nul…...

【高可用自动化体系】自动化体系
架构设计的愿景就是高可用、高性能、高扩展、高效率。为了实现架构设计四高愿景,需要实现自动化系统目标: 标准化。 流程自助化。 可视化:可观测系统各项指标、包括全链路跟踪。 自动化:ci/cd 自动化部署。 精细化:…...
总结SpringBoot项目中读取resource目录下的文件多种方法
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…...

Java-KMP字符串匹配算法
给两个字符串s和t,如何很快的知道s是否包含t(即t是否是s的子串)。暴力的方法,我们依次以s每个位置为头,去匹配t。 public int find(String s, String t) {char[] ss s.toCharArray();char[] tt t.toCharArray();int …...

Vue3使用vue-count-to数字滚动模块报错解决方案
小伙伴们是不是遇到了vue3项目使用vue-count-to出现报错的问题 报错如下: TypeError: Cannot read properties of undefined (reading _c) 这个错误信息具体是说没读取到_c的属性 具体不清楚是什么原因,排查还得去看源码,所以我们来解决&a…...
【高阶数据结构】线段树加乘(维护序列)详细解释乘与加懒标记
文章目录 1.题目[AHOI2009] 维护序列 2.懒标记处理先加后乘的形式1. 先加后乘的操作 先乘后加的形式2. 先乘后加的操作**乘法操作****加法操作** 懒标记的下传 3.代码 1.题目 题目来源:https://www.luogu.com.cn/problem/P2023 [AHOI2009] 维护序列 题目背景 老师交给小可可…...
replaceState和vue的router.replace删除query参数的区别
使用history.replaceState /*** 替换当前的 history state和url* param {(searchParams:URLSearchParams)>any} cb*/ export const replaceUrlSearch (cb) > {// 获取当前 URLconst url new URL(window.location.href)// 获取 URL 的查询参数const searchParams new …...
[USACO14JAN] Ski Course Rating G
题目大意 滑雪场用一个 N ∗ M N*M N∗M 的整数矩阵表示海拔高度,每个整数表示一个范围在 1 0 9 10^9 109 的高度。每个格子都可以滑到相邻的格子,爱好者们将会在雪场种尽情享受。有些格子被指定为起点,每个起点都要进行评级以帮助爱好者选…...

初步认识 Neo4j 图数据库
Neo4j 是一种高性能的图数据库管理系统,基于图论设计,能够高效地存储和查询复杂的关系数据。以下是关于 Neo4j 的详细介绍: 核心特性 数据模型: Neo4j 使用图数据模型,将数据以节点(Node)、关系…...
Qt中容器 QVector、QList、QSet和QMap 性能与用途比较
表格汇总: 容器存储结构随机访问性能插入/删除性能主要用途QVector连续存储的动态数组 O ( 1 ) O(1) O(1)末尾: O ( 1 ) O(1) O(1),中间: O ( n ) O(n) O(n)频繁随机访问,末尾元素的添加/删除QList优化存储࿰…...

ASP.NET Core - 依赖注入(四)
ASP.NET Core - 依赖注入(四) 4. ASP.NET Core默认服务5. 依赖注入配置变形 4. ASP.NET Core默认服务 之前讲了中间件,实际上一个中间件要正常进行工作,通常需要许多的服务配合进行,而中间件中的服务自然也是通过 Ioc…...
数学用语中 up to 的含义
1. 问题 在数学用语中,常见到“up to”这种用法, 但这种用法与我们常规情况下的用法不同,常令人困惑。 2. “等价关系”说明 已知两个数学对象 a 和 b,以及实数域R, • 当 a 和 b是通过 R 关联的࿰…...
Spring Boot + MyBatis-Flex 配置 ProxySQL 的完整指南
✅ Spring Boot MyBatis-Flex 配置 ProxySQL 的完整指南 下面是一个详细的教程,指导您如何在 Spring Boot 项目中使用 MyBatis-Flex 配置 ProxySQL 进行 读写分离 和 主从同步 的数据库访问。 🎯 目标 在 Spring Boot 中连接 ProxySQL。使用 MyBatis-…...

WEB攻防-通用漏洞_XSS跨站_权限维持_捆绑钓鱼_浏览器漏洞
目录 XSS的分类 XSS跨站-后台植入Cookie&表单劫持 【例1】:利用beef或xss平台实时监控Cookie等凭据实现权限维持 【例2】:XSS-Flash钓鱼配合MSF捆绑上线 【例3】:XSS-浏览器网马配合MSF访问上线 XSS的分类 反射型(非持久…...

人工智能任务20-利用LSTM和Attention机制相结合模型在交通流量预测中的应用
大家好,我是微学AI,今天给大家介绍一下人工智能任务20-利用LSTM和Attention机制相结合模型在交通流量预测中的应用。交通流量预测在现代城市交通管理中是至关重要的一环,它对优化交通资源分配以及提升道路通行效率有着不可忽视的意义。在实际…...

Day04-后端Web基础——Maven基础
目录 Maven课程内容1. Maven初识1.1 什么是Maven?1.2 Maven的作用1.2.1 依赖管理1.2.2 项目构建1.2.3 统一项目结构 2. Maven概述2.1 Maven介绍2.2 Maven模型2.2.1 构建生命周期/阶段(Build lifecycle & phases)2.2.2 项目对象模型 (Project Object Model)2.2.3 依赖管理模…...

Hive SQL必刷练习题:留存率问题
首次登录算作当天新增,第二天也登录了算作一日留存。可以理解为,在10月1号登陆了。在10月2号也登陆了,那这个人就可以算是在1号留存 今日留存率 (今日登录且明天也登录的用户数) / 今日登录的总用户数 * 100% 解决思…...

虚拟同步机(VSG)Matlab/Simulink仿真模型
虚拟同步机控制作为原先博文更新的重点内容,我将在原博客的基础上,再结合近几年的研究热点对其内容进行更新。Ps:VSG相关控制方向的simulink仿真模型基本上都搭建出来了,一些重要的控制算法也完成了实验验证。 现在搭建出来的虚拟…...
单头注意力机制(SHSA)详解
定义与原理 单头注意力机制是Transformer模型中的核心组件之一,它通过模拟人类注意力选择的过程,在复杂的输入序列中识别和聚焦关键信息。这种方法不仅提高了模型的性能,还增强了其解释性,使我们能够洞察模型决策的原因。 单头注意力机制的工作流程主要包括以下几个步骤:…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...