最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 如何在 Nginx 中使用 Rewrite 模块动态修改客户端请求的 URI 路径
时间:2026-08-10 16:14:51 编辑:袖梨 来源:一聚教程网
Nginx 的 rewrite 功能由核心模块 ngx_http_rewrite_module 提供,通过 rewrite、return、if 等指令在请求处理中动态修改 URI,支持正则匹配、捕获组引用及 last/break/redirect 等 flag 控制执行流程,常用于路径重写、HTTPS 跳转等场景。
Nginx 本身不提供独立的 “Rewrite 模块”,rewrite 功能由 ngx_http_rewrite_module 提供,是 Nginx 的核心模块之一,默认已编译启用,无需额外安装。它通过 rewrite、return、if、break 等指令,在请求处理的不同阶段动态修改 URI 路径(或重定向、终止流程),常用于 URL 规范化、版本迁移、SEO 适配等场景。
rewrite 指令的基本语法与匹配逻辑
rewrite 指令写在 server 或 location 块中,格式为:
rewrite <正则表达式> <替换目标> [flag];
关键点:
- 匹配对象是 当前请求的 URI(不含协议、域名、参数),例如请求
/old/path?x=1,匹配的是/old/path - 正则表达式使用 PCRE,支持捕获组(
(...)),可在替换目标中用$1、$2引用 - 末尾 flag 决定后续行为:
last(内部重写,重新匹配 location)、break(停止 rewrite,继续当前 location)、redirect(302 临时跳转)、permanent(301 永久跳转) - 多个
rewrite指令按顺序执行,除非被break或return中断
常见动态 URI 修改场景与写法
实际应用中,rewrite 常用于以下典型需求:
-
路径前缀替换:把
/api/v1/xxx改为/v1/xxxrewrite ^/api/(.*)$ /$1 break; -
带参数的路径重写:将
/article/123映射为/index.php?id=123rewrite ^/article/(d+)$ /index.php?id=$1 last; -
强制 HTTPS + 去除 www(需配合
if,注意if在 location 外慎用)if ($host = 'www.example.com') { rewrite ^(.*)$ https://example.com$1 permanent; } -
静态资源路径规范化:统一添加
/static/前缀location /img/ { rewrite ^/img/(.*)$ /static/img/$1 break; }
rewrite 执行时机与 location 匹配关系
rewrite 不是“一次性改完就完事”,它的执行阶段和 location 匹配紧密相关:
- 在
server块中写的 rewrite,发生在 初始 URI 匹配 location 之前,影响后续 location 选择 - 在
location块中写的 rewrite,发生在 已匹配到该 location 后,此时 URI 已确定作用域 -
last会触发 Nginx 用新 URI 重新查找匹配的 location;break则留在当前 location 继续处理(如 proxy_pass 或 try_files) - 避免无限循环:若 rewrite 后仍匹配当前规则且无 flag 控制,Nginx 默认最多执行 10 次 rewrite,超限返回 500 错误
调试与验证 rewrite 是否生效
rewrite 行为不易直观观察,建议结合以下方式验证:
- 启用
error_log /path/to/log notice;,rewrite 过程会在日志中记录(需注意日志级别) - 用
curl -I查看响应头中的Location(对 redirect/permanent 生效) - 在目标 location 中加
add_header X-Rewritten-URI "$request_uri";,检查响应头确认最终 URI - 测试时优先用
return 200 "$request_uri";替代真实后端,快速验证 URI 变化
相关文章
- 买单吧如何查看订单 08-10
- 麻花豆国产剧免费观看mv-麻花传媒剧国豆mv在线观看 08-10
- 包子漫画官网免费地址在哪 08-10
- 永恒之塔2在哪下载-永恒之塔2游戏下载安装的完整教程 08-10
- 好课在线app如何注销账户 08-10
- 360浏览器网页版入口-360安全浏览器网页版 08-10