网站重组时域名重定向应使用独立server块中的return 301指令,明确列出旧域名(含www变体),直接跳转至新域名加$request_uri,避免rewrite、$host拼接、if判断及http/https混配,确保路径参数完整、seo友好且配置安全可靠。

网站重组时做域名重定向,核心是用 return 301 在独立的 server 块中完成,不依赖 rewrite、不拼接不可靠变量、不混用 HTTP/HTTPS 配置。
用 return 指令配独立 server 块
为每个旧域名单独建一个监听 80 端口的 server 块,server_name 明确列出该旧域名(含 www 变体),直接 return 301 到新域名 + $request_uri:
- 避免把跳转写在主站配置里,防止规则冲突或被宝塔等面板覆盖
- 不要用 $host 或 $server_name 拼目标地址——IP 访问或 Host 头异常时会跳成 https:///xxx 这类非法 URL
- 协议部分按实际需求写死:新站只支持 HTTPS 就写 https://;若新站同时支持 HTTP/HTTPS,才考虑用 $scheme://
多旧域名统一跳到一个新域名
把所有要跳转的旧域名都写进同一个 server 块的 server_name 后面,空格分隔,共用一条 return:
- 例如旧域名有 old1.com、www.old1.com、old2.net,全部指向 new-site.com
- 配置中写:
server_name old1.com www.old1.com old2.net; - 后面跟
return 301 https://new-site.com$request_uri; - 不用 if 判断,Nginx 自动匹配任一域名命中即执行
保留路径和参数是 SEO 关键
$request_uri 必须带上,它包含完整路径和查询字符串(如 /a/b?x=1&y=2),漏掉会导致用户丢失参数、表单提交失败、统计埋点失效:
- 别用 $uri —— 它不含 ? 后面的参数
- 别写成
return 301 https://new.com/;这种裸地址,会丢光原始路径 - 测试时用 curl -I 看响应头 Location 字段是否完整准确
配置后必须验证和 reload
语法检查和重载不能跳过,浏览器缓存会影响测试结果:
- 先运行
nginx -t,确认输出 “syntax is ok” 和 “test is successful” - 再执行
nginx -s reload生效 - 用
curl -I http://old-domain.com/some/path?k=v检查返回是否为 301 且 Location 正确 - 测试阶段可临时改 return 302,避免 301 被浏览器长期缓存干扰判断











