Nginx 301重定向核心目标是完整无损迁移旧域名流量并平稳转移SEO权重,推荐用return指令配合$request_uri实现精准、稳定、SEO友好的跳转。

品牌升级换域名时,Nginx 301重定向的核心目标是:把旧域名所有流量(含路径、参数)完整、无损地导向新域名,同时确保搜索引擎把权重和排名平稳转移过去。关键不是“能跳”,而是“跳得准、跳得稳、跳得 SEO 友好”。
用 return 指令最稳妥
这是官方推荐、性能最好、逻辑最清晰的方式,尤其适合全站域名迁移:
- 在旧域名的 server 块中监听 80 和 443 端口(或仅 80,若 HTTPS 已由 CDN 或其他层处理)
- 直接用 return 301 返回新地址,搭配 $request_uri 保留原始路径和查询参数
- 避免 rewrite + permanent 的嵌套风险,也杜绝多跳或变量解析异常
示例配置:
server {
listen 80;
server_name old-brand.com www.old-brand.com;
return 301 https://new-brand.com$request_uri;
}
server {
listen 443 ssl;
server_name old-brand.com www.old-brand.com;
ssl_certificate /path/to/old.crt;
ssl_certificate_key /path/to/old.key;
return 301 https://new-brand.com$request_uri;
}
统一主域与 www 的入口
品牌升级常伴随域名规范调整(比如只留 new-brand.com,弃用 www.new-brand.com)。可在新域名的 server 块里做内部归一化:
- 对访问 www.new-brand.com 的请求,301 跳转到 new-brand.com(或反之)
- 同样用 return,不依赖 if 判断,更高效可靠
- 注意:这个跳转应在新域名的配置中完成,而非旧域名
示例(强制去 www):
server {
listen 80;
server_name www.new-brand.com;
return 301 https://new-brand.com$request_uri;
}
server {
listen 443 ssl;
server_name www.new-brand.com;
ssl_certificate ...;
ssl_certificate_key ...;
return 301 https://new-brand.com$request_uri;
}
保留路径结构,别丢参数
用户收藏的链接、外部引用的 URL 往往带具体路径和 ?utm_source=xxx 这类参数。重定向必须原样传递:
- 务必使用 $request_uri(不是 $uri),它包含问号后的全部查询字符串
- 如果新旧域名路径结构有局部差异(如 /blog/post/ → /articles/),才需 rewrite + permanent 配合正则捕获
- 但纯域名更换场景下,return + $request_uri 就已足够,无需正则
上线前必做的三件事
配置写完不等于生效,漏掉任一环节都可能造成流量丢失或循环跳转:
-
语法检查:运行
nginx -t,确认配置无误 -
平滑重载:执行
nginx -s reload(不要 kill 或 restart) - 真实验证:用 curl -I 测试几个典型 URL,确认返回状态码是 301,Location 头正确,且无 302/500 等异常


















