首页/网络/协议速查/301 Moved Permanently 永久重定向
HTTP 方法与状态码91 条

301 Moved Permanently 永久重定向

目标资源已永久移动到新 URI;客户端与搜索引擎应更新链接,后续请求直接用新地址。

协议速查网络更新于 2026-10-13

301 是什么

301 Moved Permanently 表示目标资源已经永久移动到新的地址:客户端与搜索引擎应当更新链接,后续请求直接使用新地址。RFC 9110 §15.4.2 把它归为重定向类,除了给出新地址外不携带业务语义。它是站点迁移、域名更换、明文升级到加密访问的标准做法,但也正因为「永久」这一语义,浏览器与搜索引擎会长期缓存它,一旦配错很难回滚。

基本信息

名称301 Moved Permanently(RFC 9110 §15.4.2)
作用永久重定向到新地址
关键头位置头给出目标地址
缓存可被长期缓存,由缓存指令决定时长
方法影响历史实现常把非读取方法改写为读取方法

典型使用场景

  • 全站升级到加密访问:明文入口统一跳转到加密地址
  • 更换主域名:旧域名整体指向新域名并保留路径
  • 站点改版导致路径变化:旧路径逐条指向新路径
  • 合并重复内容:把多个入口指针集中到一个规范地址
  • 下线测试域名:指向正式环境而不再承载流量

明文升级加密访问

明文升级加密访问
server {
    listen 80;
    server_name example.com;
    # 保留原始路径与查询串,避免用户跳到首页后丢失目标页面
    return 301 https://$host$request_uri;
}

重定向码怎么选

状态码性质方法是否保持适用
301永久多数实现会改成读取方法站点迁移、升级加密访问
302临时同样可能被改写临时活动页,兼容旧客户端
303临时强制改成读取方法提交之后跳转到结果页
307临时保持原方法与请求体接口临时搬家
308永久保持原方法与请求体接口永久迁移且要求保持语义

验证跳转链是否如预期

验证跳转链是否如预期
curl -sIL https://example.com/old | grep -iE '^HTTP|^location'   # 只看状态行与目标地址,不下载内容
curl -sI http://example.com/ | grep -i location   # 确认明文入口跳到了加密地址且保留了路径
永久重定向会被浏览器与搜索引擎长期记住:拿它做临时活动跳转,活动结束后仍有大量用户被导到旧目标。临时跳转请用临时码,别图省事用永久码。
迁移前先把解析记录的缓存时间调小,迁移时保证旧路径逐条对应新路径,迁移后再观察一段时间访问日志。只做首页跳转会让已收录的深层页面全部指向同一个地址,权重与用户体验都会受损。

上线检查清单

  • 逐条列出旧路径到新路径的映射,确认没有遗漏之后再切换
  • 用能自动跟随跳转的命令验证链路,确认最终落在预期地址上
  • 检查跳转是否保留了原始路径与查询串,避免用户丢失目标页面
  • 确认旧域名仍保留解析与证书,否则连跳转本身都建立不了连接
  • 切换后观察一段时间访问日志,确认旧地址上的请求量逐步收敛

跳转链为什么影响体验

现象影响
跳转链过长每多一跳就多一次往返,移动网络下等待感明显
跳转后丢参数用户点开深层页面却落在首页,只能重新寻找
跳转与缓存叠加旧规则被长期记住,回滚后仍被导走

临时还是永久怎么判断

  • 先问自己一个问题:一年后这个旧地址还会生效吗?答案是会,才使用永久码
  • 活动页、灰度入口、对照实验一律用临时码,下线时不会在用户端留下记忆
  • 确需永久跳转时同步更新站内链接与站点地图,别让系统长期依赖跳转

易错点

  • 用永久码做临时跳转,结束后用户仍被浏览器缓存的旧规则导走
  • 跳转时丢掉原始路径与查询串,用户点开深层页面却总落在首页
  • 带请求体的接口迁移也用这个码,方法被改写后请求体丢失,调用方拿不到结果
  • 迁移前后不做逐条路径映射,只是首页跳转,导致已收录页面大面积失效

数据来源与参考

  • RFC 9110 §15.4.2 301 Moved Permanently

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌