雷灵模板

网站 301/302 重定向怎么做才不掉权?Nginx/Apache 规则与常见坑

avatar

雷灵

🤖AI摘要
文章讲解网站改结构或换域名时如何正确设置重定向避免掉权,核心包括如何选择301或302,强调长期变更用301;先统一最终目标URL如是否www、http或https、是否带斜杠并尽量一次跳转到位;给出Nginx与Apache常用重定向规则及大规模URL映射思路;提醒常见问题多因目标未定或多次跳转导致,并建议上线前用命令抽样验证效果。

网站 301/302 重定向怎么做才不掉权?Nginx/Apache 规则与常见坑

我见过不少站点改结构/换域名后“看起来一切正常”,但过两周发现:收录开始乱、排名在抖、首页权重分散。追根究底,很多问题都出在重定向没设计好。

这篇文章按实战来讲四件事:

1) 301 和 302 到底怎么选(别再纠结)\
2) Nginx/Apache 最常用的几套规则(可直接抄)\
3) 5 个高频翻车坑(循环跳转、链路打架、跳首页等)\
4) 上线前怎么抽样验证(用命令一眼看出来)


1)301 和 302 怎么选?给你一个“不会错太离谱”的口诀

  • 301(永久):地址“确定要变了”,以后就按新地址走(改域名、改 URL 结构、统一 www/非 www、http→https)
  • 302(临时):短期活动、短期维护、A/B 测试、临时引流

如果你是做 SEO 的站点,大多数“长期变更”都该用 301。302 用多了,会让搜索引擎更谨慎地迁移权重。


2)先把目标定死:你最终到底想要哪个 URL?

重定向翻车,80% 是因为目标没定死:

  • 带不带 www(二选一)
  • http 还是 https(建议统一 https
  • 末尾要不要 /(目录类 URL 最好统一)

我一般建议:

  • 全站 https
  • www 与非 www 选一个(看历史收录/外链在哪边更多)
  • 统一后尽量让“旧地址到新地址”只跳一次(不要 2~3 次连续跳转)

3)Nginx:常用重定向模板(直接抄)

3.1 www → 非 www

server {
  listen 80;
  server_name www.example.com;
  return 301 http://example.com$request_uri;
}

如果你最终目标是 https,把上面的 http:// 换成 https://

3.2 httphttps

server {
  listen 80;
  server_name example.com www.example.com;
  return 301 https://$host$request_uri;
}

3.3 “一次到位”:http://wwwhttps://非www(推荐)

很多人会写两段规则导致两次跳转。你可以直接一次到位:

server {
  listen 80;
  server_name www.example.com;
  return 301 https://example.com$request_uri;
}

server {
  listen 80;
  server_name example.com;
  return 301 https://example.com$request_uri;
}

你也可以把两段合并成一段用正则,但我更喜欢这种“看得懂、好维护”的写法。

3.4 旧目录 → 新目录(改 URL 结构)

比如把 /old/xxx 迁到 /new/xxx

location ^~ /old/ {
  rewrite ^/old/(.*)$ /new/$1 permanent;
}

3.5 大规模 URL 映射(几百条以上)怎么做?

如果你是“改栏目路径/改伪静态规则”,可能会遇到一堆旧 URL 需要一对一映射。

我的建议是:别在 rewrite 里写到眼花,整理一份映射表,然后逐步验证。

  • 数量不大:手工写几条 rewrite 没问题
  • 数量很大:用 map(或在程序层做 301)更可控

示意(Nginx map 思路,仅供参考):

map $request_uri $redirect_to {
  default "";
  /old-a.html /new-a.html;
  /old-b.html /new-b.html;
}

server {
  location / {
    if ($redirect_to != "") {
      return 301 $redirect_to;
    }
    # 正常业务处理...
  }
}

4)Apache(.htaccess)常见写法(示意)

RewriteEngine On

# http -> https
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# www -> non-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]

Apache 环境差异比较多(虚拟主机/面板规则/站点根目录不同),如果你发现规则没生效,优先确认 .htaccess 是否真的被加载。


5)最容易翻车的 5 个坑(我踩过/见过的)

坑 1:规则顺序错 → 循环跳转

你同时做 http→https、www→非www、路径改写时,很容易互相打架。

解决办法:目标先定死,然后尽量做到“一跳到位”。

坑 2:多处同时写跳转(CDN / Nginx / 程序)

很多站点前面还有 CDN/负载均衡,后台程序里也可能有强制跳 https。

这会导致:你在 Nginx 里写了规则,但实际跳转来源可能是 CDN 或程序。

建议:把跳转逻辑集中在一个地方(通常是最外层入口:CDN 或 Nginx)。

坑 3:把所有旧 URL 粗暴跳首页

这类“偷懒跳法”对用户体验很差,也会让搜索引擎觉得你在糊弄。

更好的做法:

  • 能一对一映射就一对一
  • 找不到对应内容就返回 404/410(删除内容用 410 更合理)

坑 4:改完没更新站内链接/站点地图

你跳转做得再完美,如果站内链接还在指向旧 URL,爬虫仍然会反复抓旧地址。

改完记得:

  • 更新站点地图(sitemap)
  • 更新站内内链
  • 检查 canonical(规范链接)是否指向最终地址

坑 5:跳转链太长(2~3 次以上)

跳转链越长,抓取越浪费,用户也更慢。

建议用命令测一下:

curl -I -L http://example.com/old-url

如果你看到 Location 连续跳了好几次,就要合并规则。


6)上线前抽样验证清单(建议你照做)

我一般会抽 50~100 条旧 URL(覆盖:文章页、分页页、分类页、tag页),逐条验证三件事:

  • 返回码是否是 301/302(符合预期)
  • 最终落地 URL 是否正确(没有中途多跳)
  • 页面是否能正常打开(不是跳到 404/首页)

命令行更快:

# 看返回码与 Location
curl -I http://example.com/old-url

# 看重定向链
curl -I -L http://example.com/old-url

如果你准备迁域名,建议在 Search Console 里提交新站点地图,并持续观察“覆盖率/抓取错误/重定向错误”。


总结

重定向不是“能跳就行”,而是要:目标明确、规则可控、上线可验证。

你按本文把最终 URL 定死、把规则做到一跳到位、把抽样检查跑完,掉权风险会小很多。


相关阅读

黔ICP备2022004976号
powered by 雷灵模板