多个域名访问部署在GitHub Pages上的同一网站博客

通过多域名访问 GitHub Pages 同一网站博客,具有以下优点:
多域名优点
- 提升可用性:通过多个域名指向同一博客,即使主域名出现问题(如解析错误、被封禁等),用户仍可以通过其他域名访问,提高网站的可用性。
- 提升搜索引擎收录:多个域名可以增加网站在搜索引擎中的曝光率,尤其是当不同域名被不同搜索引擎收录时。
- 品牌个性化访问:设立博客网站品牌,让用户更容易记住访问,提升用户体验。
- 备份和迁移:在更换域名时,可以通过多域名配置实现无缝迁移,避免旧链接失效。
一、主/副域名指向同一个 GitHub Pages
1. 配置主域名 (www.chinapmcc.com
) 指向 GitHub Pages
- 步骤:
- 在域名注册商(如阿里云、腾讯云)的 DNS 管理页面,添加以下 CNAME 记录:
主机记录:www
记录类型:CNAME
记录值:CustomDomain.github.io
TTL:默认 - 在 GitHub 仓库的
Settings > Pages > Custom domain
中填写www.chinapmcc.com
,并勾选 Enforce HTTPS。
- 在域名注册商(如阿里云、腾讯云)的 DNS 管理页面,添加以下 CNAME 记录:
2. 配置副域名 (chinapmcc.dpdns.org
) 指向 GitHub Pages
选项 1(推荐):CNAME 记录
主机记录:chinapmcc
记录类型:CNAME
记录值:CustomDomain.github.io选项 2:A 记录(若不支持 CNAME)
直接指向 GitHub 的 IP:
主机记录:chinapmcc
记录类型:A
记录值:185.199.111.153
3. GitHub Pages 配置
- 在仓库根目录添加
CNAME
文件(无后缀),内容为:
www.chinapmcc.com
如果你部署的是自己的服务器,通过上述DNS管理配置即可实现域名的跳转,如果是用的GitHub部署则副域名访问会报404错误,接着往下看解决方案。
本方案通过页面规则进行跳转,不用创建两个仓库那么麻烦。
二、实现方案:部署在GitHub博客,通过页面规则实现跳转
- 页面规则创建步骤:
- 点击域名 → 规则 → 页面规则 → 创建页面规则
- URL (必需):
www.chinapmcc.dpdns.org/*
- 选取设置 (必需):
转发URL
|301-永久重定向
- 输入目标 URL (必需):
https://www.chinapmcc.com/$1
- 点击保存和部署页面规则
三、为什么 DNS 设置无效,而页面规则有效?
(1) DNS 设置无效的原因
GitHub Pages 的限制
GitHub Pages 要求 自定义域名必须通过CNAME
文件显式绑定,否则会返回404
。
即使你的 DNS 将chinapmcc.dpdns.org
正确解析到 GitHub 的 IP(或通过 CNAME 指向www.chinapmcc.com
),但 GitHub 会检查请求的域名是否在CNAME
文件中:- 如果域名未绑定(如
chinapmcc.dpdns.org
),直接拒绝访问。 - 如果域名已绑定(如
www.chinapmcc.com
),正常响应内容。
- 如果域名未绑定(如
代理状态(Proxy Status)的影响
- 若 Cloudflare 的代理状态为 “仅 DNS”(灰色云):
DNS 仅负责解析,流量直接到达 GitHub,但 GitHub 会因域名未绑定返回404
。 - 若代理状态为 “已代理”(橙色云):
Cloudflare 会拦截流量并尝试缓存/处理,但 GitHub 可能因 HTTPS 证书不匹配或域名未授权仍返回错误。
- 若 Cloudflare 的代理状态为 “仅 DNS”(灰色云):
(2) 页面规则有效的原因
页面规则是 Cloudflare 的 流量处理层,它在 DNS 解析之后生效,直接修改请求的响应行为:
- 当访问
www.chinapmcc.dpdns.org
时:- DNS 先解析到目标 IP(如 GitHub 的服务器)。
- 页面规则拦截请求,直接返回
301
跳转到www.chinapmcc.com
,完全绕过 GitHub 的域名验证。 - 用户浏览器收到跳转指令,地址栏变为
www.chinapmcc.com
,此时 GitHub 会正常响应(因为主域名已绑定)。
(3) DNS 设置 VS 页面规则:优先级关系
- DNS 解析:
是第一步,决定域名指向哪个 IP(如chinapmcc.dpdns.org
→185.199.111.153
)。 - 页面规则:
在 DNS 解析之后生效,对匹配的请求进行重定向、缓存等操作。
执行顺序:
1 | 用户请求 → DNS 解析 → Cloudflare 代理(若开启) → 页面规则 → 到达服务器 |
优先级:
- 页面规则优先于 DNS 解析结果。只要请求匹配页面规则,Cloudflare 会直接处理(如跳转),不会继续转发到 DNS 解析的目标 IP。
四、如何选择跳转方案?
场景 1:希望保留副域名地址栏(无跳转)
- 条件:必须让 GitHub 接受
chinapmcc.dpdns.org
的请求。 - 解决方案:
- 在 GitHub 仓库的
CNAME
文件中添加chinapmcc.dpdns.org
(需删除原有www.chinapmcc.com
)。 - 在 Cloudflare 中:
- 设置
chinapmcc.dpdns.org
的 A 记录 指向 GitHub Pages 的 IP。 - 关闭代理(灰色云)。
- 设置
- 缺点:GitHub 只能绑定一个主域名,需牺牲
www.chinapmcc.com
的直接绑定。
- 在 GitHub 仓库的
场景 2:强制跳转到主域名(当前方案)
- 推荐配置:
- DNS 设置:保持
chinapmcc.dpdns.org
的 CNAME 指向www.chinapmcc.com
(代理状态关闭)。 - 页面规则:添加
www.chinapmcc.dpdns.org/*
→301 跳转到 https://www.chinapmcc.com/$1
。
- DNS 设置:保持
- 优点:
- 主域名正常绑定 GitHub,副域名通过跳转实现访问。
- 无需修改 GitHub 的
CNAME
文件。
五、验证步骤(可选)
检查 DNS 解析:
1
dig www.chinapmcc.dpdns.org +short
- 应返回
www.chinapmcc.com
的 IP(如 GitHub 的185.199.111.153
)。
- 应返回
测试页面规则:
- 访问
http://www.chinapmcc.dpdns.org/test
,应跳转到https://www.chinapmcc.com/test
。
- 访问
检查 GitHub 配置:
- 确保
CNAME
文件仅包含www.chinapmcc.com
。
- 确保
总结
- DNS 设置无效:因 GitHub 对未授权域名返回
404
,与 DNS 解析无关。 - 页面规则有效:它直接拦截请求并跳转,绕过 GitHub 的验证。
- 两者关系:页面规则在 DNS 之后处理请求,优先级更高。
- 推荐方案:保持当前页面规则跳转,这是最稳定的多域名访问方案。
- 标题: 多个域名访问部署在GitHub Pages上的同一网站博客
- 作者: xuliyaoPro
- 创建于 : 2025-06-20 00:00:00
- 更新于 : 2025-06-20 00:00:00
- 链接: https://chinapmcc.com/2025/06/20/网站建设/多个域名访问部署在GitHub Pages上的同一网站博客/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论