最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 Location 配置如何使用 rewrite 模块在规则内实现临时跳转
时间:2026-08-27 11:27:49 编辑:袖梨 来源:一聚教程网
Nginx中location块内用rewrite实现302跳转,必须显式添加redirect标志,如rewrite ^/old/(.*)$ https://example.com/new/$1 redirect;该指令匹配后立即返回302响应,终止后续处理。
在 Nginx 的 location 块中使用 rewrite 实现临时跳转(HTTP 302),关键在于正确书写 rewrite 指令并添加 redirect 标志。
rewrite 指令的基本语法和 redirect 标志
rewrite 指令用于匹配并重写请求 URI,其基本格式为:
rewrite <正则表达式> <替换目标> [flag];
要实现临时跳转(302),必须在 flag 中显式指定 redirect。如果不加 flag,默认是内部重写(不发跳转响应);若写 permanent 则是 301 永久跳转。
例如:
location /old/ {
rewrite ^/old/(.*)$ https://example.com/new/$1 redirect;
}
访问 /old/page.html 会返回 302,并跳转到 https://example.com/new/page.html。
location 匹配与 rewrite 执行顺序很重要
Nginx 处理请求时,先匹配 location,再执行其中的 rewrite。这意味着:
-
rewrite只在该location生效,不影响其他块 - 如果
rewrite后的 URI 又匹配到另一个location,且没加last或break,可能触发新一轮匹配(但加了redirect就不会继续——直接返回 302) -
redirect会立即终止当前处理流程,向客户端发送跳转响应,不再执行后续指令(如proxy_pass、try_files等)
常见写法对比:302 vs 301 vs 内部重写
同一规则下不同 flag 的效果差异明显:
-
rewrite ^/a/(.*)$ /b/$1 redirect;→ 返回 302,浏览器地址栏变化 -
rewrite ^/a/(.*)$ /b/$1 permanent;→ 返回 301,缓存性强,慎用于测试环境 -
rewrite ^/a/(.*)$ /b/$1;或rewrite ^/a/(.*)$ /b/$1 last;→ 不跳转,仅内部 URI 重写,后续仍走当前或新 location 处理
注意点和实用建议
- 正则中的捕获组(
(.*))可在替换目标中用$1、$2引用,注意不要遗漏斜杠或协议 - 跳转目标为绝对 URL(含
http://或https://)时,Nginx 自动设为 302;但显式写redirect更清晰、可维护 - 避免循环跳转:确保 rewrite 后的路径不会再被同一条规则反复匹配(比如没排除新路径前缀)
- 调试时可用
error_log /path/to/log notice;配合rewrite_log on;查看重写过程(仅限 debug 编译版)