Nginx高级之Rewrite规则

article/2025/10/21 20:34:59

进阶阶段的回顾:

Nginx进阶之静态Web资源服务

Nginx进阶之代理服务

Nginx进阶之负载均衡服务

Nginx进阶之缓存服务和动静分离   

作用及应用场景

作用: 实现对URL的重写以及对匹配(正则表达式)的url的重定向

场景: 

1. URL访问跳转, 支持开发设计

① 页面跳转  ② 兼容性支持  ③ 展示效果

2. SEO优化

3. 维护

① 后台维护  ② 流量转发

4. 安全

① 伪静态页面

配置语法

systax: rewrite [正则表达式 替换前的URL] [替换后的URL] [标识];

default: 无配置

context: server域/location域/if判断里

配置实例: rewrite ^(.*)$ /pages/maintain.html break;  # 把所有的请求都跳转至maintain.html页面, break是一个标识符.

正则表达式

常用的正则表达式规则: 

.匹配除换行符以外的任意字符
?重复0次或1次
+重复1次或多次
*最少链接数, 哪台服务器的连接数少就往那台服务器分发
\d匹配数字
^匹配字符串的开始
$匹配字符串的结尾
{n}

重复n次

{n,}重复n或更多次
[c]匹配单个字符c
[a-z]匹配a-z小写字母中的任意一个
\转义字符, 如: 转义一个后缀的点(index\.html$)
()匹配括号之间的内容, 通过$1、$2调用

$1、$2的举例:

if($http_user_agent ~ MSIE){rewrite ^(.*)$ /msie/$1 break;  //(.*) 匹配所有文件名, 将其路径改为/msie/[该文件名]
}

FLAG

flag是一个标识位, 标识rewrite的类型

last停止rewrite的检测
break停止rewrite的检测
redirect返回302临时重定向, 地址栏会显示跳转后的地址
permanent返回301永久重定向, 地址栏会显示跳转后的地址(后面再次访问也会定向至该地址, 除非清理缓存)

break / last:

进入default.conf配置:

此时:

① 访问 http://192.168.19.136/test/  返回  {"status":"success"}

② 访问 http://192.168.19.136/break  返回  404

③ 访问 http://192.168.19.136/last  返回  {"status":"success"}

结论:

当访问带有/test/的url时, 默认返回{"status":"success"}; 当访问带有/break的url时, rewrite至/test/的路径下, 由于找不到该目录的存在, 返回404; 当访问带有/last的url时, rewrite至/test/的目录下, 再重新以这个rewrite的url进行又一次请求, 此时跟第①种情况一样, 所有返回{"status":"success"}.

redirect / permanent:

进入default.conf配置:

测试① redirect的效果

1) 把last开启, 注释掉redirect, 重启nginx, 访问: http://192.168.19.136/last

2) redirect开启, 注释掉last, 重启nginx, 继续访问: http://192.168.19.136/last

结论:

对于last, 则直接返回200, 对于redirect, 则会先重定向至指定地址, 返回302和重定向的地址, 并再次请求, 返回200.

测试② redirect和permanent的区别

1) redirect开启, permanent注释掉, 重启nginx, 访问: http://192.168.19.136/Milky-Way

此时关闭nginx服务, 并再次访问: http://192.168.19.136/Milky-Way

2) permanent开启, redirect注释掉, 访问: http://192.168.19.136/Milky-Way

此时关闭nginx服务, 并再次访问: http://192.168.19.136/Milky-Way

结论:

redirect: 临时重定向功能, 当nginx服务端关闭之后, 再次访问时会再次向服务端发出请求, 此时肯定无法给出响应, 也就无法访问成功;

permanent: 永久重定向功能, 当nginx服务端关闭之后, 再次访问时不需要再次向服务端发出请求, 此时直接跳转, 返回200状态码.

规则场景

场景① 

需要两台服务器: 192.168.19.136 和 192.168.19.143

136服务器配置:

143服务器配置: 需要新建一个121.html文件

启动服务器, 分别访问: 192.168.19.136/course-11-22-33.html / 192.168.19.136/nginx / 192.168.19.136/你好

结果:

③ 重定向至百度搜索

注: rewrite规则的优先级: rewrite规则书写在不同的地方其优先级不同(http域 > server域 > location域)


http://chatgpt.dhexx.cn/article/iXai9TSd.shtml

相关文章

Nginx配置请求转发location及rewrite规则

location / {# 精确匹配 / ,主机名后面不能带任何字符串[ configuration A ] }location / {# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求# 但是正则和最长字符串会优先匹配[ configuration B ] }location /documents/ {# 匹配任何以 …

Rewrite规则简介

Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块&…

rewrite详解

rewrite模块 URI跟URL介绍 什么是uri?统一标识符,拿www.abc.com/aw/wd/举例,那么rui就是/aw/wd/这部分数据(也有可能是图片,html网页,如果是伪静态的话,那就得看配置是啥玩意了 什么是url? 统一定位符&#xff…

Nginx基础——Rewrite规则

点击上方“芋道源码”,选择“置顶公众号” 技术文章第一时间送达! 源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69 篇,预计总共 75 篇 )中文详细注释的开源项目Java 并发源码合集RocketMQ 源码合集Sharding-JDBC 源码解析合集Spring …

F280049C Crossbar X-BAR

文章目录 X-BAR9.1 输入X-BAR9.2 ePWM、CLB和GPIO输出X-BAR9.2.1 ePWM X-BAR9.2.1.1 ePWM X-BAR架构 9.2.2 CLB X-BAR9.2.2.1 CLB X-BAR架构 9.2.3 GPIO输出X-BAR9.2.3.1 GPIO输出X-BAR架构9.2.4 X-BAR标志 总结 X-BAR 交叉开关(在本章中称为X-BAR)提供…

BCGControlBar Pro 31.2 正式版-Key

什么是 MFC 的 BCGControlBar Pro? BCGControlBar(“Business Components Gallery ControlBar”)是一个 MFC 扩展库,企鹅180846090允许您创建具有完全自定义选项(功能区、可自定义工具栏、菜单等)和一组丰富…

BCGControlBar Library for .NET 7.1.1 Crack

什么是 BCGControlBar Library for .NET? BCGControlBar Library for .NET 是 100% 托管代码工具包,用 C/CLI 编写,面向 Microsoft .NET Framework 2.0 或更高版本。该库包含许多高度可定制、完全可设计的组件,使您能够创建最复杂…

BCGControlBar v12的向导使用图解

BCGControlBar专业版是MFC的一个扩展库,您可以用来构建类似于Microsoft Office 2000/XP/2003/2007/2010、Microsoft Visual Studio(打印、用户定制工具栏、菜单等)和其他一些知名产品的高级用户界面。 首先从网上下载BCGControlBar v12资源 &…

MFC界面控件BCGControlBar v33.4 - 日历、属性网格组件升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了,该版本包含了对Windows 11 Mica materi…

BCG学习(一)——BCGControlBar安装与配置

最近工作中需要用到BCG相关的知识,趁着全民防疫、居家隔离这段时间正好学习一下,作此笔记,记录学习过程和心得体会。话不多说,开整! 简介 下载、安装与配置 例程编译与运行 简介 BCG是MFC的一个扩展库,可以…

MFC扩展库BCGControlBar Pro v33.5新版亮点 - 控件、脚本管理增强

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.5已正式发布了,此版本包含了Ribbon(功能区)自定义…

MFC界面控件BCGControlBar v33.4 - 支持Win 11 Mica material主题

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了,该版本包含了对Windows 11 Mica materi…

MFC界面控件BCGControlBar v33.4 - 各子控件全面升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了,该版本包含了对Windows 11 Mica materi…

MFC界面控件BCGControlBar v33.3 - 升级Ribbon Bar自定义功能

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 该版本包含了增强的Ribbon自定义、新的日期/时间数字指示器、带有文本对齐的组控件、多行支持以及其他一些新功…

MFC界面控件BCGControlBar v33.3 - 可视化管理器和主题更新

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.3已正式发布了,该版本包含了增强的Ribbon自定义、新的…

BCGControlBar使用说明

BCGControlBar使用说明 1.BCGControlBar简介1.1 概述1.2 开发环境1.3 安装 1.BCGControlBar简介 1.1 概述 BCG是MFC的一个扩展库,可以用来构建类似于Microsoft Office 2003/2007/2010/2013/2016 和 Microsoft Visual Studio-like(打印、用户定制工具栏、…

【MySQL】物化视图

物化视图是相对于视图而言的,但是两者实际上并没有什么关系就如java/javaScript一样 首先mysql的视图不是一种物化视图,他相当于一个虚拟表,本身并不存储数据,当sql在操作视图时所有数据都是从其他表中查询出来的。者带来的问题是…

Oracle——物化视图

文章目录 含义物化视图的语法物化视图的创建1、自动刷新的物化视图 ON COMMIT2、非自动刷新的物化视图 ON demand 关于手动刷新物化视图的删除资料参考 含义 什么是物化视图? 物化视图,通俗点说就是物理化的视图。 什么叫物理化? 将视图以表…

PostgreSQL视图和物化视图

由于每天工作忙碌,好久没更新了,今天更新一下,讲一讲视图和物化视图的概念以及区别吧。 1. 视图 1.1 PostgreSQL视图概述 PostgreSQL中的视图和MySQL中的视图是一样的,在查询的时候进行扫描基础表的操作。 视图表示基础表对应的…

达梦物化视图的使用与管理

文章目录 前言一、关于物化视图所需的权限二、创建手动刷新物化视图1.测试环境构造2.创建手动刷新物化视图3.自动完全更新的物化视图4.自动快速更新的物化视图5.定时更新物化视图 三、物化视图的管理四、总结 前言 物化视图是从一个或几个基表导出的表,同视图相比&…