permanent 标记使 nginx 返回 301 状态码,实现永久重定向;仅限 server 或 location 块使用,推荐优先用 return 301 替代以提升效率与安全性。

在 Nginx 的 rewrite 指令中,使用 permanent 标记会让服务器返回 HTTP 状态码 301 Moved Permanently,告诉客户端(包括浏览器和搜索引擎)该 URL 已永久迁移到新地址。
语法与基本写法
rewrite 指令的完整格式支持三个可选标记: last、break 和 permanent(或 redirect)。其中:
-
permanent:触发 301 重定向 -
redirect:触发 302 临时重定向(默认行为,可省略)
示例:将所有 HTTP 请求强制跳转到 HTTPS 的 www 版本
rewrite ^(.*)$ https://www.example.com$1 permanent;permanent 的生效位置与限制
permanent 只能在 server 或 location 块中使用,且需注意以下几点:
- 不能在
if块中直接使用rewrite ... permanent(Nginx 官方不推荐在if中用rewrite,易出错) - 更安全的做法是配合
return 301(推荐用于简单重定向) - 若必须用
rewrite(比如需要正则捕获变量),确保它位于合适的作用域,并避免与其他重写规则冲突
替代方案:优先用 return 301
对于大多数永久重定向场景,Nginx 官方更推荐使用 return 指令,它更高效、语义更清晰、无隐式循环风险:
或者带路径重写:
return 301 https://example.com/new-path$request_uri;验证是否生效
配置后重载 Nginx(nginx -s reload),用 curl 测试:
应看到响应头包含:
HTTP/1.1 301 Moved PermanentlyLocation: https://www.example.com/some/path











