网站换域名、改 URL 结构,或者从 HTTP 切到 HTTPS,都会碰到同一个问题:旧地址上的访问和搜索权重要怎么接到新地址上。这时候用的就是 301 重定向。阿里云301 跳转有好几种配法,放在哪一层、改多少,取决于站点的架构。下面先讲清楚 301 的含义,再说阿里云上常见的四种配置方式,最后用三个案例看具体怎么做。

301 是什么,什么时候用
HTTP 状态码 301 的意思是“永久移动”。浏览器和搜索引擎收到这个响应后,会把旧地址换成新地址,原页面积累的排名信号也随之转过去。302 则是临时跳转,搜索引擎通常还会保留旧地址,所以永久换址时用 302 一般不合适。
下面几种情况比较适合用 301:
- 换域名,比如从 old-shop.com 搬到 newshop.com。
- 改版后 URL 规则变了,比如 /product/123.html 改成 /p/123。
- HTTP 强制跳到 HTTPS,或者统一 www 与不带 www 的写法。
- 删掉的页面,要指向内容相近的新页面。
有一点要留意:301 会被浏览器和搜索引擎缓存。之后如果想撤掉或修改目标,已经访问过的用户可能还停在旧跳转上。所以正式上线前,最好先在测试环境把规则跑一遍,确认目标没写错再放出去。
阿里云上的四种配法
位置不同,改动量和控制的精细度也不同。越靠近用户的那一层,配置越省事,但能分辨的路径也越粗。
1. 云解析 DNS 的显性 URL 转发
如果是整个域名指向另一个域名,可以在域名控制台的解析设置里添加显性 URL 转发,目标填新域名,类型选 301。不需要服务器,整站迁移时最省事。缺点也很明显:一般只能做整站或首页级别的跳转,旧路径和新路径没法一一对应。
2. CDN 的 URL 重写
站点前面挂了阿里云 CDN 的,可以在 CDN 控制台按路径配置 URL 重写规则,命中后返回 301。源站代码不用动,适合处理有规律的一批旧路径。
3. 负载均衡的转发规则
SLB 或 ALB 的 7 层监听支持重定向规则,可以按域名、路径和协议来判断。HTTP 跳 HTTPS 一般在这一层完成,配一次,后面挂的站点都能覆盖到。
4. ECS 上的 Nginx 配置
映射关系复杂、需要逐条对应时,直接写 Nginx 规则最灵活。常见的写法有两种:
- 整站跳转:把旧域名的请求统一用 return 301 https://newshop.com$request_uri; 转到新域名。$request_uri 会保留原来的路径和参数,否则所有页面都会被压到首页。
- 路径映射:用 location ~ ^/product/(\d+)\.html$ 匹配旧地址,再用 return 301 /p/$1; 指向新地址。规则写完后,记得逐条核对正则是否真的覆盖了旧链接。
三个案例
以下案例为说明用途的虚构示例,数字仅作演示。
案例一:电商站整站换域名
某电商站从 old-shop.com 迁到 newshop.com,原站有约 3 万个已被搜索引擎收录的商品页。团队最初只在云解析里设了首页跳转,结果商品页直接返回 404,访问量明显下降。
后来改为在 ECS 的 Nginx 里做整站跳转,保留 $request_uri,让每个旧地址都落到新域名的同一路径上。上线后用 curl -I 随机抽查 50 个旧链接,确认都返回 301,Location 指向也正确。之后再到搜索引擎站长平台提交地址变更。
案例二:全站强制 HTTPS
一个企业官网的 HTTP 和 HTTPS 都能正常打开,搜索引擎两个版本都收录了,内容重复。团队在负载均衡的 HTTP 监听上添加了重定向规则,所有 HTTP 请求用 301 跳到 HTTPS。一条规则就覆盖了全部子路径,不必逐个站点修改。
案例三:文章改版后的链接修复
一个内容站把文章地址从 /news/2019/0512.html 改成了 /article/0512,改版后外部链接大量失效。团队先导出旧 URL 列表,用脚本生成新旧对应关系,再通过 CDN 的 URL 重写批量配置 301。两周后,404 数量明显下降,文章访问量基本回到改版前的水平。
常见错误
- 只跳首页。内页没有跳转,用户和搜索引擎手里的旧链接都会失效。
- 丢了路径和参数。目标地址写死成新首页,所有旧页面就会被合并到一个地址上。
- 跳转成环。A 跳到 B,B 又跳回 A,浏览器会直接报错。上线前检查一下规则之间是否互相指向。
- 链式跳转。旧地址先跳到中间地址,再跳到最终地址。每多一跳,加载速度和权重传递都会受影响,应直接指向最终地址。
- 误用 302。永久迁移却用了临时跳转,搜索引擎可能不会把权重转过去。
上线后怎么验证
配置完成后,用命令行看一下响应头,大部分问题都能发现:
- 执行 curl -I https://old-shop.com/product/123.html,状态码应为 301。
- 查看 Location 字段,确认目标地址正确,并且只经过一次跳转。
- 从不同地区或不同设备访问抽样链接,排除缓存带来的干扰。
选哪种方式,主要看规则的复杂程度。整站迁移且路径不变,用云解析的显性 URL 转发就够了;需要逐条映射,用 Nginx 或 CDN 的 URL 重写更稳妥。不管用哪种,上线前都先在测试域名上验证一遍。