Nginx 之Rewrite 使用详解

news/2025/10/15 23:34:53/文章来源:https://www.cnblogs.com/KL2016/p/19144519

Nginx 的 rewrite 模块是处理 HTTP 请求过程中的一个重要功能,它允许基于 Perl 兼容正则表达式(PCRE)对用户请求的 URI 进行重写,并返回 30x 重定向跳转或按条件执行相关配置。

Rewrite 指令

2.1 指令语法

Nginx 中的 URL 重写主要依赖于 rewrite 指令,其基本语法如下:

rewrite <regex> <replacement> [flag];

regex:用于匹配 URI 的正则表达式。

replacement:将匹配到的 URI 替换成的新 URI。

flag(可选):控制重写的行为,常见的标志有:

last:表示重新搜索新的 location 块(即继续匹配新的规则)。
break:停止当前 location 块中的规则匹配,执行后续指令。
redirect:执行临时 重定向(302)。
permanent:执行永久重定向(301)。


2.2 Flag 标记说明
last:重写请求并继续搜索 location 匹配。
break:重写请求并停止搜索 location 匹配。
redirect:返回 302 临时重定向。
permanent:返回 301 永久重定向。

3. Rewrite 与 Location

rewrite 指令可以在 server 或 location 块中配置。location 块只对域名后除去传递参数的字符串起作用,而 rewrite 可以对域名或参数字符串进行匹配和重写。

3.1 Location 分类
普通 location:匹配特定路径。
正则 location:使用正则表达式匹配路径。
优先级:Nginx 会优先匹配带有正则表达式的 location,然后是最长非正则 location。


3.2 Rewrite 和 Location 比较
rewrite 用于重写请求 URI。
location 用于定义请求的处理方式
 

4. Rewrite 实际场景
4.1 基于域名的跳转
将旧域名的访问重定向到新域名,同时保持参数不变。

# 定义一个 server 块,用于处理进来的 HTTP 请求
server {
# 监听 80 端口,即 HTTP 默认端口
listen 80;

# 指定该 server 块响应的域名,这里是 olddomain.com
server_name olddomain.com;

# 定义 location 块,匹配所有 URI(/ 表示根路径)
location / {
# 使用 rewrite 指令将所有请求从 olddomain.com 重定向到 newdomain.com
# 并保持原有的请求路径和查询参数不变
rewrite ^/(.*)$ http://newdomain.com/$1 permanent;
}
}
  

4.2 基于客户端 IP 访问跳转
只允许特定 IP 访问,其他 IP 重定向到维护页面。

# 定义一个 server 块,用于处理进来的 HTTP 请求
server {
# 监听 80 端口,即 HTTP 默认端口
listen 80;

# 指定该 server 块响应的域名,这里是 example.com
server_name example.com;

# 定义 location 块,匹配所有 URI(/ 表示根路径)
location / {
# 使用 if 指令进行条件判断,$remote_addr 是客户端的 IP 地址
if ($remote_addr != '192.168.1.100') {
# 如果客户端 IP 地址不是 '192.168.1.100',则返回 302 状态码
# 并将请求重定向到 /maintenance.html,表示网站正在维护中
return 302 /maintenance.html;
}
}
}
 

这段配置的作用是限制对 example.com 的访问,只允许 IP 地址为 192.168.1.100 的客户端访问所有资源,其他所有 IP 地址的访问都会被重定向到 /maintenance.html 页面,通常用于网站维护期间。这里使用的是临时重定向(302 状态码),意味着浏览器会显示新的 URL(即 /maintenance.html),但搜索引擎和缓存可能会保留原始请求的 URL。
 

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

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

相关文章

libaom 在ubuntu 上用鸿蒙OHOS编译

1) 导入 OHOS 环境(当前会话)export OHOS_SDK=/root/harmony/command-line-tools/sdk/default/openharmony export OHOS_SYSROOT=$OHOS_SDK/native/sysroot export PATH=$OHOS_SDK/native/llvm/bin:$PATH# 确认编译器…

Aexlet-VGG2

使用CUDA 10轮结果显示还是Alex胜出

《膜拜!适合新手入门的卷积神经网络原理详解教程》读书报告

视频从卷积操作的基本概念入手,逐步深入到步长、边缘填充、特征图尺寸计算、参数共享、池化层作用以及整体网络架构等关键知识点,通过可视化的矩阵运算示例,让抽象的算法原理变得通俗易懂。(一)卷积操作:特征提取…

[asm/c]:SYSCALL系统调用的编号(x86_64)

[asm/c]:SYSCALL系统调用的编号(x86_64)[asm/c]:SYSCALL系统调用的编号(x86_64)一、基本说明1.  操作系统信息(ubuntu25.10):  Linux ubuntu 6.17.0-5-generic2.  系统调用编号文件的位置:  /usr/in…

公众号排版用什么好?一次技术视角的系统拆解:效率、兼容与智能协同

一、问题的起点:为什么“排版”成了内容生产的瓶颈? 在自媒体体系中,内容产出流程大致分为三步: 1️⃣ 内容构思与生成; 2️⃣ 视觉包装与排版; 3️⃣ 平台发布与分发。 在这三步中,排版环节的时间成本常常被低…

Linux系统下对拍

可以直接用C++的system函数执行对拍脚本 把造数据的mk.out文件和两个版本的代码文件放在一个文件夹下 void duipai() {//Linux系统下可执行文件后缀为.outwhile (true) {system("mk.out > data.in");syst…

json请求字符串格式化或使用转义字符

json请求字符串格式化或使用转义字符json请求字符串格式化或使用转义字符 测试接口: 通过String字符串类型来接收json字符串 @PostMapping("/wz/wzMqHandle") public void wzMqHandle(@RequestBody S…

Rokid Glasses语音交互特性分析和复刻“乐奇” 唤醒词的方案简述

前言 Rokid Glasses 作为头戴式智能设备的代表,其语音交互系统以 “自然、轻量、抗扰” 为核心设计理念,构建了适配头戴场景的完整交互方案,而 “乐奇” 唤醒词作为交互入口,是这一方案的关键载体。本文将先系统分…

C++_设计模式

单例模式确保一个类只有一个实例,并提供一个全局访问点饿汉模式 饿汉模式是在程序启动时就创建实例,因此不存在线程安全问题,但可能会造成资源浪费,特别是当单例对象的初始化代价较高或程序中没有频繁使用该对象…

数据库查询通信开销降低97%的技术方案

研究人员提出了一种新的数据库表分布方法,通过分析查询数据识别涉及最大数据传输的连接属性作为分布键,在实验中使多表查询的通信开销降低了80%-97%。如何将数据库查询的通信开销降低高达97% 某中心的研究人员描述了…

人生的底色

人生的底色是孤独的,孤独的出生,孤独的生活,孤独的死去,生命中的每一个人终究只会伴你走过一段旅程,或长或短,或开心或痛苦,但孤独却会伴随你的一生。

差分操作正确性证明

差分操作正确性证明 本文是作者因题目写差分写挂了后随手总结的。 定义 对于一个长度为 \(n\) 的数组 \(a\),定义其差分数组为 \(p\),且 \(\forall 1\le i\le n,p_i=a_i-a_{i-1}(a_0=0)\)。 转化回原数列 给些式子就…

ansible安装脚本

ansible安装脚本#!/usr/bin/env bash # # 通用 Ansible 安装脚本 # 支持多种方式安装(yum/apt/pip/source) # 支持 root 和 普通用户 # 支持自定义版本(默认 2.9.27)set -eANSIBLE_VERSION=${1:-2.9.27} # 默认…

详细介绍:【笔记】介绍 WPF XAML 中 Binding 的 StringFormat详细功能

详细介绍:【笔记】介绍 WPF XAML 中 Binding 的 StringFormat详细功能pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

CF2143D2

给定长度为 \(n(n \le 2000)\) 的序列 \(a\),询问有多少个子序列满足不存在长度 \(\ge 3\) 的下降子序列。 显然可以 DP,令 \(dp_{i, j, k}\) 表示前 \(i\) 个数组成的子序列,最大值为 \(j\),长度为 \(2\) 的下降…

结果(Results)和结论 (Conclusion)的联系与区别

学术论文中结果(Results)和结论 (Conclusion)的联系与区别维度 结果 (Results) 结论 (Conclusion)联系 结论基于结果。结论必须以结果的客观发现为基础,不能无中生有。区别 事实呈现,描述“是什么”(What)。 事实的…

【训练技巧】PyTorch多卡训练模型DistributedDataParallel和DataParallel设置方法详解及分布式训练命令解释 - 实践

【训练技巧】PyTorch多卡训练模型DistributedDataParallel和DataParallel设置方法详解及分布式训练命令解释 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; …

20251015

今天上了离散数学课,然后收获了非常多的知识,接着又上了马克思原理课,今天总结下来就是非常的收获,然后中午经过一个舒爽的午睡以后,直接完成英语作业,读了单词剪辑了视频作业,非常的满意,然后还写了算法与数据…