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

热门教程

旧版网站永久跳转时 Nginx 301 重定向如何设

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

使用return 301是最简洁高效的重定向方式,需在独立server块中监听旧域名的80或443端口,server_name写全旧域名,跳转目标写死新域名并拼接$request_uri以保留路径和参数。

直接用 `return 301` 指令是最简洁、高效且推荐的做法,不依赖正则、不触发 location 匹配,避免循环或权重丢失。

监听旧域名,返回新地址

在独立的 server 块中监听 80 端口(或 443,视旧站协议而定),明确指定旧域名,并用 return 301 拼出新地址:

  1. server_name 必须写全旧域名,比如 old-site.com www.old-site.com
  2. 跳转目标建议写死新域名(如 https://new-site.com),避免用 $host 引发开放重定向风险
  3. 保留原始路径和参数,加上 $request_uri —— 这对 SEO 和用户体验很关键
  4. 如果旧站只有 HTTP,而新站只支持 HTTPS,直接写 https:// 更稳妥,防止 $scheme 返回 http 导致跳到不安全地址

多旧域名统一跳转

多个旧域名指向同一个新站点时,不用为每个域名单独写 server 块:

  1. 把所有旧域名并列写在 server_name 后,空格分隔
  2. 只需一条 return 301 https://main-site.com$request_uri;
  3. Nginx 会自动匹配任一域名命中即执行跳转

HTTP → HTTPS + 域名统一要分开处理

如果既要换协议又要换域名(例如 http://old.comhttps://new.com),不能靠一个规则覆盖所有情况:

  1. 先确保有一个仅监听 80 端口的 server 块,专门做旧域名跳转
  2. 不要把它和新站的 443 SSL 配置混在一个块里,否则跳转逻辑可能失效
  3. 新站的 443 server 块必须独立存在,含正确证书路径和 ssl on 相关配置

验证与上线前检查

配置完别急着 reload,这几步不能跳过:

  1. 运行 nginx -t 确认语法无误,尤其注意 return 行末尾有没有分号
  2. 执行 systemctl reload nginxnginx -s reload 生效
  3. curl -I http://old-site.com/some-path?test=1 查看响应头是否为 301 Moved Permanently,Location 是否正确
  4. 浏览器访问测试,确认地址栏跳转后是新域名+原路径,且状态码是 301(不是 302)

热门栏目