GitHub 绑定多个 Pages 域名问题
GitHub 绑定多个 Pages 域名问题
1、前言
很早之前我就记得某篇讲 Hexo 的文章里提到每个 GitHub 只能拥有一个 GitHub Pages 页面,所以后来一直不敢在自己的帐号底下添加除 blog 外的其他 GitHub Pages 项目。直到今天仔细研究了下 GitHub 的规则,才发现上面那句话有很大的问题。
这篇文章主要是讲 GitHub 下多个 GitHub Pages 项目相关以及自定义域名访问的问题,没太多技术上的东西,基本上都是属于 GitHub 的文档意译和解释,英语好的可以直接看这官网这两篇 FAQ:
注:虽然全文基本上都在讲
GitHub Pages,但我个人亲测这些规则也都适用于GitCafe Pages,两者没有本质区别。所以像我一样双线部署blog的可以安心地把GitHub的东西搬到GitCafe来。不过为了行文方便,下文不再特意强调GitCafe Page,均以GitHub Pages代指(Coding的是否也如此并不清楚,有心人可以自测)。
2、场景
以我个人为例,我在 GitHub 上已经有了一个和用户名同名的 GitHub Pages 项目当作个人主页(chitanda.github.io),但是我现在又有了几个想法:
- 再在
GitHub上弄一个GitHub Pages项目当作我的demo页面展示,而不是在原先的blog项目下加子目录(一来访问URL不好看,二来很多主题会强制对所有项目内的文件添加样式,影响展示效果)。 - 同时
demo页面的访问链接是我自定义的一个域名(如:demo.chitanda.me或者demo.chitanda.github.io,而不是chitanda.github.io/demo)。
那么上面两个要求,GitHub 能否都满足呢?卖个关子先,结论放在下文。
3、GitHub Pages 的分类及区别
根据官方文档,GitHub Pages 分为两类:个人/组织主页以及项目主页,两者基本上没啥区别,但是有以下几点不同:(该文场景下个人和组织帐号没什么区别,所以下文为了行文方便将统一用个人主页代指)
- 个人主页必须要和用户的
GitHub帐号同名,所以每个用户有且只能有一个repo作为个人主页,且必须是<username>/<username>.github.io的形式;而项目主页的命名则没有这种限制,且数量有任意多个。 - 不考虑绑定的自定义域名的前提下,个人主页的
GitHub二级域名为<username>.github.io;项目主页的GitHub二级域名为<username>.github.io/<projectname>,没有<projectname>.<username>.github.io这种方式。 - 个人主页的展示内容以
master分支里的文件为准;而项目主页的展示内容以gh-pages分支内的文件为准。
从上面的分析可以发现两个问题已经解决掉一个半了。那么剩下来的问题就是如何配置一个项目主页并绑定自定义域名了。
4、项目主页的建立和自定义域名配置
注:配置过程和个人主页一模一样,如果之前配置过个人主页的,可以跳过这部分内容了
4.1、建立项目主页
- 新建一个
repo,repo名字随意。 - 点进
repo主页然后点击右面的Settings,页面往下拉到GitHub Pages部分,选择Launch automatic page generator>Continue to layouts>Publish page即可。(由于大部分情况下并不用默认的页面和样式,所以这里不需要太纠结于内容编辑)
这样一个项目主页就建立完成了,此时可以用 <username>.github.io/<projectname> 访问到了。
4.2、绑定自定义域名
- 在项目的
repo里新建一个CNAME文件,并将不带协议名的裸域名写进去(demo.chitanda.me而不是http://demo.chitanda.me/)。
这一步可以参考官方文档 - 到你域名的
DNS服务商里给对应的二级域名添加CNAME解析到<username>.github.io(和个人主页的配置相同)。 - 等待
DNS生效,具体时间和服务商有关(十几分钟到几小时都有可能)。
5、GitHub 和 GitCafe 双线部署的小 tips
上面的配置对于单线部署的来说已经完成了,不过对于双线部署的用户而言,有几个小问题需要注意下
DNS服务商里要按照来源对对应的二级域名做分流配置。(具体过程可以参考此处)- 如果想要所有用户都可以用
example.com/project的方式访问到repo,GitHub和GitCafe的repo名字必须相同,否则会导致有一边跳 404。
可以参考我这里的例子:
GitHub上的项目主页名字为demo,GitCafe上的项目主页名字为demos,则不翻墙的情况下国内用户访问chitanda.me/demo会跳 404,而用demo.chitanda.me则正常(另外同个链接在翻墙和不翻墙的情况下看到的页面不同,也是分线部署的功劳)。
6、总结
聊胜于无的总结。对于上面提到的几个问题,也有了答案:
- 每个
GitHub帐号下只能有 1 个个人主页repo,但是可以有不限数量的项目主页repo。 - 没有自定义域名的情况下,项目主页的访问链接只能是
<username>.github.io/<projectname>而不是<projectname>.<username>.github.io GitCafe添加GitHub Pages后必须要自己本地同步文件上去,而不能像GitHub那样一键建站,GitCafe每个repo初始化页面的代码是有步骤略过去的,新手的话一开始可能同步不了。建议看他们的帮助。

