当前位置: 首页 > news >正文

Nginx 之Rewrite 使用详解

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.jsqmd.com/news/14386/

相关文章:

  • libaom 在ubuntu 上用鸿蒙OHOS编译
  • Aexlet-VGG2
  • 《膜拜!适合新手入门的卷积神经网络原理详解教程》读书报告
  • 科学与社会研讨课笔记
  • p66 实训2
  • [asm/c]:SYSCALL系统调用的编号(x86_64)
  • Rokid Glasses语音交互特性分析和复刻“乐奇” 唤醒词的方案简述
  • C++_设计模式
  • 数据库查询通信开销降低97%的技术方案
  • 人生的底色
  • 差分操作正确性证明
  • CF2143D2
  • 结果(Results)和结论 (Conclusion)的联系与区别
  • 【训练技巧】PyTorch多卡训练模型DistributedDataParallel和DataParallel设置方法详解及分布式训练命令解释 - 实践
  • 20251015
  • 实用指南:玳瑁的嵌入式日记---0929(ARM--ADC)
  • C++篇:007
  • C++篇:006
  • C++篇:005
  • 轻量级ChatGPT克隆版nanochat技术解析
  • 10.15 —— 2020icpc上海D
  • [QOJ888] Travel around China 题解
  • MySQL面试必考:从入门到精通的20个问题
  • 手撕大模型 | MQA 和 GQA 原理解析
  • 实用指南:CTFHub RCE通关笔记9:命令注入 过滤目录分隔符(3种方法渗透)
  • [COCI2022-2023#2] Tramvaji 题解
  • 一级指针和二级指针作为函数参数的区别
  • ROUGE指标
  • CSP-S 模拟 29
  • 实用指南:【编号508】(道路分类)湖南路网数据湖南路网分类数据(2025年)