redirect标记使rewrite指令返回http 302临时重定向,location头设为重写后url;目标须为完整url或以/开头路径,匹配后终止当前块后续rewrite执行。

在 Nginx 中,使用 redirect 标记可让 rewrite 指令显式返回 HTTP 302 临时重定向响应,而不是内部重写(默认行为)。
rewrite 中的 redirect 标记作用
redirect 是 rewrite 指令的可选标记之一,它强制 Nginx 返回 302 状态码,并将 Location 响应头设为重写后的 URL。与 permanent(返回 301)不同,redirect 表示临时跳转,浏览器不会缓存该重定向。
基本语法和写法
格式为:
rewrite 正则表达式 替换目标 redirect;注意:
- 必须写在
server或location块中 - 替换目标需是完整 URL(含协议和域名)或以
/开头的路径 - 若目标是相对路径(如
/new-path),Nginx 会自动补全为当前请求的 scheme + host + 该路径 - 若目标是完整 URL(如
https://example.com/new),则直接用作 Location 值
常见使用示例
将旧文章路径临时跳转到新路径:
rewrite ^/article/([0-9]+)\.html$ /post/$1/ redirect;强制 HTTP 跳转到 HTTPS(临时):
rewrite ^(.*)$ https://$host$1 redirect;将带 www 的域名临时跳转到不带 www 的版本:
if ($host ~ ^www\.(.+)$) {rewrite ^(.*)$ https://$1$uri?$args redirect;
}
注意事项
- 避免在
if中滥用rewrite ... redirect,尤其不要在非根 location 中用无前缀的正则,易导致循环重定向 - 调试时可通过
curl -I查看响应头中的Location和状态码确认是否生效 - 若需永久重定向,请改用
permanent标记;临时跳转才用redirect - rewrite 规则匹配后会立即终止当前块的后续 rewrite 执行,但不会跳出 location —— 若需阻止后续处理,可加
break或调整逻辑顺序











