品牌升级域名跳转应使用Nginx return 301指令实现精准、完整、稳定重定向,覆盖HTTP/HTTPS所有旧域名,并保留$request_uri路径与参数;URL结构调整需用锚定正则rewrite,配置后须验证状态码、跳转地址及参数完整性。

用 return 指令最安全可靠
推荐优先使用 return 301,而不是 rewrite + permanent。原因很实在:return 是原子操作,无正则解析开销,不会受 location 匹配顺序或 if 块嵌套干扰,也避免了 rewrite 多次执行导致的变量错乱或循环跳转。
标准写法示例(放在旧域名对应的 server 块里):
server {
listen 80;
server_name old-brand.com www.old-brand.com;
return 301 https://www.new-brand.com$request_uri;
}
说明:
-
$request_uri 保留完整路径和查询参数(比如
?utm_source=mail),这点比$uri更完整; - 如果新域名只走 HTTPS,这里直接写
https://开头,无需额外判断协议; - 多个旧域名(如带 www 和不带 www)可统一写在
server_name后,用空格分隔。
HTTPS 也要同步覆盖
旧域名若曾支持 HTTPS,需单独配置一个监听 443 的 server 块,同样用 return 跳转,否则用户从书签或搜索引擎点 HTTPS 链接会卡在证书错误页。
示例:
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://www.new-brand.com$request_uri;
}
注意:证书路径只需能通过 nginx -t 校验即可,不一定要有效——只要跳转发生得早,浏览器根本不会校验证书内容。
子目录或路径结构调整要精准匹配
如果品牌升级还伴随 URL 结构变化(例如 /product/123 → /items/123),就得用 rewrite 配合 permanent:
rewrite ^/product/(\d+)$ /items/$1 permanent;
但要注意:
- 正则必须锚定开头(
^)和结尾($),防止误匹配; - 捕获组用
(),引用用$1,别写成\1; - 这类规则建议放在独立的 location 块里,避免和 root 或 index 指令冲突。
跳转后务必验证三件事
配置 reload 后,立刻检查:
- 访问
http://old-brand.com→ 应返回 301,Location 头为https://www.new-brand.com/; - 访问
http://old-brand.com/about?ref=test→ Location 头应含完整?ref=test; - 用 curl -I 或浏览器开发者工具 Network 标签确认状态码确实是 301,不是 302 或 500。
漏掉任意一项,都可能造成权重丢失或用户跳转失败。


















