Nginx 中不存在名为 redirect 的标志位;302 重定向需用 return 302 <完整URL> 或 rewrite ... redirect 实现,前者更推荐,后者中的 redirect 是 rewrite 指令的尾部标记而非独立开关。
在 Nginx 中,并没有名为 redirect 的“标志位”;你可能混淆了 Nginx 的语法与其他工具(如某些编程语言的重定向函数或旧版 Apache 指令)。Nginx 实现 302 临时重定向,是通过 return 或 rewrite 指令配合状态码完成的,而非某个叫 redirect 的开关。
这是推荐方式:简洁、明确、不依赖正则、无隐式行为。
return 302 https://example.com/; —— 精确返回 302 + 绝对 URLif 使用(但注意:if 在 location 外不推荐,且有局限性)这里才是你提到的 redirect 出现的地方——它是 rewrite 指令的尾部标记,不是独立标志位:
rewrite ^/old$ https://example.com/new permanent; → 301rewrite ^/old$ https://example.com/new redirect; → 302(默认行为)rewrite ^/old$ /new redirect; → 302,相对路径自动补全为当前 host 协议+域名redirect 或 permanent,则为内部重写(302 不触发,浏览器地址栏不变)避免踩坑:
return 302 后不能跟相对路径,只接受完整 URL 或带 scheme 的路径rewrite ... redirect 中的正则匹配失败时,该行不生效,不会报错if 块中滥用 rewrite,优先用 return 替代curl -I 查看实际响应头,确认 Location 和状态码是否符合预期不复杂但容易忽略。记住核心:要显式 302,首选 return 302 <full_url>;若用 rewrite,务必加上 redirect 标记,它才真正触发外部跳转。