利用新Repository给Github Pages配置多个域名

问题提出

一个Github Pages只能绑定一个自定义域名,但在已经绑定了一个域名的情况下,想使用多个域名访问到托管到Github Pages的页面时该怎么办呢?

踩坑经历

Github Pages对应的Repository下有一个CNAME文件,它包含了你的自定义域名,但是只能添加一条记录,不能添加两条域名记录。

直接在域名DNS服务商进行DNS配置也是不可以的,否则会出现“404 There is not a GitHub Pages site here.”的错误信息。

解决办法

我们可以通过设置另外一个新的Github Pages来绑定新的域名,再通过新的Github Pages来重定向到指定的Github Pages。下面介绍方法步骤。

第一步:新建Repository

打开Github主页,点击右上角的加号,在下拉框内选择New Repository来新建一个名字任意的Repository。

第二步:配置Repository

我创建了一个名字为Site-Redirecting的Repository。为了使这个Repository能使用Github Pages服务,在创建一个全新的Repository后,可以向Repository内放置一个_config.yml 文件(内容参考如下)。

1
2
title: koukihk
author: koukihk

保存文件后,在Repository内的Setting->Pages内配置你的域名信息。

以图示新域名为例子,配置成功后,如果在DNS服务商处将 www.kouki.xyz 这个域名解析到新Github Pages,就能通过它访问到新Github Pages,只不过Page没有内容。

第三步:新建重定向页面

在Repository内新建一个html文件,目的是通过它将重定向到我们原来的Github Pages,内容可以参考下面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>正在重定向……</title>
</head>
<script language="javascript">
var domain = "kouki.ltd";
var current = window.location.href;
var target = current.substring(current.indexOf('/', current.indexOf(':') + 3));
window.location.href = "//" + domain + target;
location.href = "//" + domain + target;
</script>
<body>
正在重定向……
</body>
</html>

至此,新建的Repository应包含下面几个文件。

第四步:配置新域名DNS

在你的DNS服务商处,将新域名解析到和旧域名一样的地址即可,即旧域名是怎样解析的新域名就怎样解析,建议使用一条A记录和一条CNAME记录,关于如何配置可以参考其他文章。

效果

打开新域名 www.kouki.xyz ,标签上显示短暂的“正在重定向”提示,随后跳转到旧域名。

参考

多个域名映射同一个github pages | 守望的个人博客 (yanbinghu.com)