使用return 301是最简洁高效的重定向方式,需在独立server块中监听旧域名的80或443端口,server_name写全旧域名,跳转目标写死新域名并拼接$request_uri以保留路径和参数。
直接用 `return 301` 指令是最简洁、高效且推荐的做法,不依赖正则、不触发 location 匹配,避免循环或权重丢失。在独立的 server 块中监听 80 端口(或 443,视旧站协议而定),明确指定旧域名,并用 return 301 拼出新地址:
server_name 必须写全旧域名,比如 old-site.com www.old-site.com
https://new-site.com),避免用 $host 引发开放重定向风险$request_uri —— 这对 SEO 和用户体验很关键https:// 更稳妥,防止 $scheme 返回 http 导致跳到不安全地址多个旧域名指向同一个新站点时,不用为每个域名单独写 server 块:
server_name 后,空格分隔return 301 https://main-site.com$request_uri;
如果既要换协议又要换域名(例如 http://old.com → https://new.com),不能靠一个规则覆盖所有情况:
server 块,专门做旧域名跳转server 块必须独立存在,含正确证书路径和 ssl on 相关配置配置完别急着 reload,这几步不能跳过:
nginx -t 确认语法无误,尤其注意 return 行末尾有没有分号systemctl reload nginx 或 nginx -s reload 生效curl -I http://old-site.com/some-path?test=1 查看响应头是否为 301 Moved Permanently,Location 是否正确