Github Pages 支持自定义域名 wwwnon-www 域名之间跳转,跳转的目标域名是在 CNAME 中指定的域名。但这个功能在 HTTPS 请求下无效,意味着如果我们的自定义域名使用强制 HTTPS 时,无法在 wwwnon-www 域名间跳转。

Github Pages 支持 CNAMEA 两种 DNS 解析方式,使用 CNAME 相对于 A 记录来讲会更稳定,不用关心 Github Pages 的服务器 IP 变更,通过 CNAME 记录解析到 *.github.io 即可。 而如果直接使用主域名作为自定义域名,就「必须」设置 A 记录解析(ALIASANAME 这两种非标准的方式除外)。

我打算使用 www 子域名作为自定义域名,通过 CNAME 记录解析到 lkebin.github.io,然后使主域名的访问请求跳转到 www.lkebin.com

www 直接通过 CNAME 解析到 lkebin.github.io 很方便,任何 DNS 服务商都可以做到,但要想主域名能跳转 www 域名就要麻烦一点。国内的 DNS 服务商 DNSPod 和 Aliyun 的解析服务支持 显性URL 转发,这是我需要的功能,但它们有个共同的特点:要求使用这个功能的域名已经进行备案。我的域名没有备案,用不了…… 只能换国外的试试。

Cloudflare 提供 CDN 服务,也可以只使用 DNS,它还有个的功能叫 Page Rules 功能,类似上面的 显性URL 转发功能,但更强大。

在 Cloudflare 配置 DNS 解析

lkebin.com DNS

这里设置 www 域名 CNAME 解析到 Github Pages 并且只使用 DNS,而不通过 Cloudflare 的服务器,是为了更稳定的在国内使用。

主域名则必须要通过 Cloudflare 的服务器才能使用 Page Rules 功能实现跳转,因为 Page Rules 这个功能和我们在 Nginx 里面配置 rewrite 规则类似,是需要有 Web Server 支持的,而不是 DNS 的功能。另外,Cloudflare 默认就开启了 SSL,这是我们能在 HTTPS 访问时实现跳转的一个必要条件。主域名访问通过 Cloudflare 的服务器问题不大,因为它实际不传输数据,它只有一个跳转任务,不会对实际访问网站的速度由太大影响。

图片中主域名使用 CNAME 指向了 Github Pages 域名,是先前尝试直接使用主域名做自定义域名时配置的,Cloudflare 支持为主域名设置 CNAME 解析,它的实现方式在 这里 有介绍。在我的使用场景下,理论上这里的主域名解析成什么样都无所谓,因为它只到 Cloudflare Page Rules 就跳转了。

这样配置以后,就满足了我想在 HTTPS 下从主域名跳转到 www 的需求。