域名跳转和泛解析,解决的根本不是同一件事
域名跳转的两种实现层次 域名跳转与泛解析的层次差异示意图:HTTP 应答指向新地址,DNS 记录把所有子域名指向同一台主机](https://cn.hostease.com/blog/wp-content/uploads/2026/10/shared-hosting-301-difference-cover.webp)
换域名、把带 www 的地址统一成不带 www、客户把旧域名贴到微信里还能打开——这些需求常被笼统地称作”设置域名跳转”,于是很多站长在面板里点了一个功能就开始等结果:有人发现地址栏根本没变,有人发现 SEO 后台多出几十个内容相同的页面。本篇指南教你如何先分清 301 重定向和泛解析各自管哪一层,再按场景选对一种,附上可直接粘贴的 Apache 规则、DNS 记录写法和验证命令。
两者的差别不在细节,而在发生的位置。301 重定向是 HTTP 层的应答:Web 服务器在把页面交出去之前,先回一个 301 状态码和一条 Location 头,浏览器据此跳到新地址,地址栏会变。泛解析是 DNS(域名解析系统)层的记录:它只负责把 *.example.com 这样的所有子域名都解析到同一个 IP,浏览器请求到的是同一台主机、同一套程序,地址栏一个字都不会动,服务器回的还是 200。把这两件事当成同一件事处理,后面所有的配置错误几乎都由此而来。
301 重定向:地址栏变了,权重也跟着走
301 的官方定义是 Moved Permanently,永久移动。服务器返回它的同时会带上目标地址,浏览器自动跳过去,并把这次跳转记进缓存。搜索引擎爬到 301 时的处理方式是:把旧地址的信号(外链、历史排名)尽可能转移到新地址,索引里的旧链接逐步替换成新链接。这就是换域名时必须用 301 而不是 302 的原因——302 表示临时移动,搜索引擎会保留旧地址的索引,权重不会转移,你等于白做了一次迁移。
顺带区分另外两个容易混的状态码。307 和 308 分别是 302 与 301 的”保留请求方法”版本,POST 请求跳转时用它们才不会把提交内容和请求方法丢掉;纯展示型页面用 301/302 就够了。而 301 被浏览器长期缓存这件事,在调试阶段是个陷阱:如果你先配错了目标地址,浏览器记下的 301 会一直生效,清理缓存也无济于事,只能用无痕窗口或 curl 验证真实响应。稳妥的做法是先用 302 把链路调通,确认无误后再把规则里的状态码改成 301。
泛解析:所有子域名都指向同一台主机,地址栏不变

泛解析的写法是在 DNS 里加一条主机记录为 * 的 A 记录,含义是”任何没有单独配置的子域名,都解析到这个 IP”。它解决的是”让无数个子域名都能打开”的问题,比如给每个客户一个 client-a.example.com、给每个测试环境一个随机子域、或者让用户自定义的三级域名自动生效。这类需求用 301 是做不出来的:你不可能预先知道用户会敲哪个子域名,也就没法为它写规则。
代价也很直接。第一,所有子域名返回的如果是同一套内容,搜索引擎看到的是几十上百个重复页面,主域名的抓取预算会被大量消耗。第二,通配符只匹配一级,*.example.com 覆盖 a.example.com,但不覆盖裸域 example.com,也不覆盖 a.b.example.com,很多”泛解析配了却没生效”的工单都是这一条造成的。第三,证书问题:给泛解析配 SSL(安全套接层证书)需要泛域名证书,而它同样只覆盖一级子域名,二级子域会直接报证书不匹配。第四,任何未被单独配置的子域名都会指向你的服务器,攻击者可以把自己控制的子域名解析过来,用来做钓鱼落地页,日志里也会混进大量扫描流量。
什么情况该用哪一种:四类常见场景
把判断标准落到具体需求上,选择其实很快。下面四种情形覆盖了绝大多数虚拟主机用户的真实问题,可以直接对号入座。
- 换了主域名:旧域名必须保留解析并配置 301 指向新域名,且要逐路径跳转而非全部跳到首页,否则旧文章的外链价值全部作废。旧域名至少续费保留一年。
- 统一 www 与裸域:两个地址都能打开就是两个版本,用 301 固定一个方向即可。注意方向一旦定下不要再改,反复切换会让搜索引擎重新评估。
- 需要大量动态子域名:用户主页、独立站点、区域分站这类场景用泛解析,配合服务器端的子域名绑定与按 Host 分目录;这类结构更适合用子域名体系而不是子目录,具体取舍可参考 子目录与子域名的模式对比。
- 只是想让某个域名能打开同一个站:如果目的是”多域名访问同一套内容”,先想清楚 SEO 上的重复内容代价,通常更合理的做法是选定主域名,其余域名全部 301 过去。
在虚拟主机上配置 301 的三种位置
虚拟主机没有 root 权限,301 只能落在三个地方:站点根目录的 .htaccess、控制面板自带的跳转功能、以及程序内部。最稳的是 .htaccess,因为它不依赖程序更新,也不会被插件覆盖。以下规则把带 www 的请求和 http 请求同时收敛到 https://example.com,注意替换成自己的域名后再上传:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
如果只是单个页面的搬家,用 mod_alias 的一行更省事:Redirect permanent /old-page https://example.com/new-page。但同一路径不要同时写 Redirect 和 RewriteRule,两者处理阶段不同,很容易互相覆盖或形成循环;站内已有大量重写规则时统一用 RewriteRule 系列,从 Apache 迁到 Nginx 时也要把这类规则逐条对照改写,可以参照 Apache 迁移 Nginx 的规则对照。
第二种位置是控制面板。cPanel 一类的面板提供 Redirects 入口,可选永久(301)或临时(302),填写来源路径与目标地址后会自动写进 .htaccess;Hostease 虚拟主机的控制面板同样提供域名跳转与子域名管理入口,具体菜单名称以你后台实际版本为准。用面板的好处是不用记语法,代价是它生成的规则有时会和已有规则打架,改完务必回到 .htaccess 看一眼实际写入了什么。第三种位置是程序内部,WordPress 站点要额外注意:数据库里的 siteurl 和 home 两项如果没有同步改成新域名,后台会自己跳回旧地址,形成一个谁也没配过的重定向循环。
配置泛解析的完整顺序
泛解析的坑大多不在记录本身,而在记录之外的三件事:服务器要认这个 Host、证书要覆盖得过来、日志与安全要跟得上。按下面的顺序做,可以少走两轮弯路。
- 先加通配符记录:在 DNS 服务商处新增主机记录为
*的 A 记录,指向虚拟主机 IP;同时给裸域单独配置 A 记录或 CNAME,通配符不会自动覆盖裸域。 - 再让主机认 Host:虚拟主机需要把目标子域名绑定到站点目录(面板里一般叫附加域、子域或 ServerAlias),只改 DNS 不绑 Host,访问会落到默认站点或 404。
- 补证书覆盖:泛域名证书只覆盖一级,需要多个层级时改用逐个子域签发或改用通配符加多域名组合;证书续期一旦漏掉,浏览器会直接拦页面,回源加密与证书链的配置思路见 回源加密与证书配置实操。
- 最后收口风险:关闭用不到的泛解析、给敏感子域单独配记录、把访问日志按 Host 拆开,避免扫描流量和钓鱼子域混进来。
; 通配符只匹配一级,裸域要单独写
* IN A 203.0.113.10
@ IN A 203.0.113.10
www IN CNAME example.com.
上面的 IP 是文档示例地址,替换成你主机商提供的真实 IP 再保存。记录生效后再去验证:dig +short test.example.com 应返回同一个 IP,如果返回空说明记录还没同步,返回别的地址则说明存在优先级更高的记录。迁移期间需要两个地址同时可用时,解析的 TTL 建议提前调到 300 秒以内,切换完成后再调回,这套节奏在 不停机迁移与域名解析切换里有更完整的说明。
验证与排障:两行命令看清真实响应

配置完不要只看浏览器,浏览器的缓存会骗你。curl -I https://example.com 看的是服务器真实返回的第一行状态码和 Location 头,如果这里没有 301,问题一定在服务器或规则,跟浏览器无关;curl -sIL http://example.com | grep -i -E "^HTTP/|^location" 会跟完整条跳转链,一眼看出是几跳、最终落在哪个地址。
- 跳转链超过两跳:常见于 http 跳 https、www 跳裸域、旧域名跳新域名三条规则同时生效,把三条合并成一条即可,链路过长会拖慢首屏并稀释权重。
- 报 ERR_TOO_MANY_REDIRECTS:先查程序配置里的站点地址是否仍是旧域名,再查 CDN(内容分发网络)是否强制回源 https,两处都改对才能断掉循环。
- 泛解析返回 404 但 IP 正确:DNS 已经生效,问题在虚拟主机没绑定该子域名,回到面板补一条绑定记录,不要继续在 DNS 里反复改。
- 子域名证书告警:先确认访问的是几级子域,再看证书的 SAN 列表里有没有这一项,二级子域不在泛域名证书覆盖范围内,只能单独签发。
先把层次分清,再动手改配置
回到最初的问题:域名跳转到底该用哪一种,答案取决于你要改变的是”浏览器的地址”还是”域名的解析结果”。要改地址、要把旧链接的权重接过来,用 301,规则写在 .htaccess 或面板的 Redirects 里,测试阶段先上 302,验证通过再换成 301。要让一大片子域名都能打开,用泛解析,同时把服务器绑定、证书覆盖、日志拆分三件事一起做完,别只加一条 * 记录就收工。
两者的错误用法也很对称:用泛解析代替重定向,会得到一堆内容相同、地址不同的页面;用重定向代替泛解析,则要为每个子域名手写规则,永远写不完。上线前建议按”DNS 解析 → 服务器绑定 → 重定向规则 → 证书 → 缓存”这五个环节逐项验证一遍,任何一个环节跳过,故障都会在别人访问时才暴露。主机选型与迁移阶段的同类风险,可以对照 虚拟主机避坑清单一起核对。
如果你需要在一个域名下同时承载多个独立站点,建议先做小范围验证:用一个测试子域把泛解析、证书和日志跑通,确认没有重复内容与证书告警后,再批量放开。日常维护上,可以考虑把 .htaccess 和 DNS 记录纳入版本管理或至少留一份变更记录,出问题时能快速定位是哪一次改动引入的跳转。Hostease 虚拟主机的域名跳转与子域名管理都在控制面板内,改动前先在 .htaccess 里留一份备份,回滚会省很多时间。