一聚教程网:一个值得你收藏的教程网站

热门教程

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。这意味着:

  1. rewrite 只在该 location 生效,不影响其他块
  2. 如果 rewrite 后的 URI 又匹配到另一个 location,且没加 lastbreak,可能触发新一轮匹配(但加了 redirect 就不会继续——直接返回 302)
  3. redirect 会立即终止当前处理流程,向客户端发送跳转响应,不再执行后续指令(如 proxy_passtry_files 等)

常见写法对比:302 vs 301 vs 内部重写

同一规则下不同 flag 的效果差异明显:

  1. rewrite ^/a/(.*)$ /b/$1 redirect; → 返回 302,浏览器地址栏变化
  2. rewrite ^/a/(.*)$ /b/$1 permanent; → 返回 301,缓存性强,慎用于测试环境
  3. rewrite ^/a/(.*)$ /b/$1;rewrite ^/a/(.*)$ /b/$1 last; → 不跳转,仅内部 URI 重写,后续仍走当前或新 location 处理

注意点和实用建议

  1. 正则中的捕获组((.*))可在替换目标中用 $1$2 引用,注意不要遗漏斜杠或协议
  2. 跳转目标为绝对 URL(含 http://https://)时,Nginx 自动设为 302;但显式写 redirect 更清晰、可维护
  3. 避免循环跳转:确保 rewrite 后的路径不会再被同一条规则反复匹配(比如没排除新路径前缀)
  4. 调试时可用 error_log /path/to/log notice; 配合 rewrite_log on; 查看重写过程(仅限 debug 编译版)

热门栏目