一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 中 HTTPS 配置如何在品牌更名时做到全站所有历史链接零死链迁移

时间:2026-08-27 20:46:49 编辑:袖梨 来源:一聚教程网

品牌更名全站零死链迁移须用Nginx return 301分别监听80和443端口,覆盖所有旧域名并强制跳转至HTTPS新地址,保留$request_uri;多域名统一配置于同一server_name后,路径结构调整则需锚定正则rewrite;配置后须nginx -t校验并curl验证状态码、Location头及参数完整性。

品牌更名时要实现全站历史链接零死链迁移,核心不是“加跳转”,而是“不丢路径、不漏协议、不绕弯路”。Nginx 的配置必须覆盖所有可能被用户或搜索引擎访问的入口,并确保每个旧 URL 精准映射到语义等价的新 URL。

HTTP 和 HTTPS 入口都得单独接管

旧域名如果曾开放过 HTTP 和 HTTPS 两个通道,就必须分别监听 80 和 443 端口。只配 80 端口跳转,用户点书签里的 https://old.com/about 会直接卡在证书错误页,根本触发不了跳转。

  1. 监听 80 端口的 server 块里,用 return 301 https://new.com$request_uri;,强制升 HTTPS 并保留完整路径和参数
  2. 监听 443 端口的 server 块里,同样用 return 301 https://new.com$request_uri;,但必须配好旧域名有效的 SSL 证书(哪怕只是 Let's Encrypt 的临时证书)
  3. 证书不能复用新站的,除非它是通配符证书或 SAN 列表明确包含 old.com

多旧域名统一跳转,别堆 if 或 rewrite

如果品牌整合涉及 old-a.com、old-b.net、www.old-a.com 等多个旧域,不要在一个 server 块里写 if 判断 host,也不要用 rewrite 匹配——容易漏、难维护、还可能循环跳转。

  1. 把所有旧域名用空格写在同一个 server_name 后面,例如:server_name old-a.com old-b.net www.old-a.com;
  2. Nginx 会自动匹配任意一个命中即执行 return,逻辑清晰,性能无损
  3. 如果旧域名数量多或需分组管理,可拆成多个独立 server 块,每个只管一类(如子品牌、收购站点),更利于灰度和回滚

路径结构调整必须锚定正则,且仅限必要场景

如果品牌升级同时调整了 URL 结构(比如 /product/123 → /items/123),就不能靠 return 全量跳,得用 rewrite,但必须精准控制范围。

  1. 写在独立的 location 块里,避免和 root、index 指令冲突
  2. 正则必须以 ^ 开头、$ 结尾,例如:rewrite ^/product/(d+)$ /items/$1 permanent;
  3. 捕获组用 (),引用用 $1,不是 1;$request_uri 不适用这类结构变化,它只适合域名级平移

验证闭环:从配置到真实请求都不能跳步

配置写完不是 reload 就完事。零死链的关键在于每一步都可验证。

  1. 先用 nginx -t 检查语法,再 nginx -s reload
  2. curl -I http://old.com/some-path?ref=test 看响应头:状态码必须是 301,Location 必须是 https://new.com/some-path?ref=test(含完整参数)
  3. 同样测试 HTTPS 地址:curl -I https://old.com/xxx,确认跳转能走通,不报证书错误
  4. 上线后盯住 Nginx 的 404 日志,重点排查子域名、API 路径、带 hash 的前端路由等易遗漏点

热门栏目