我有一个gh-pages分支在我的一个http://github.com回购。如果我访问http://myuser.github.com/myrepo, GitHub项目页面可以正常工作

我想设置一个自定义域(myexample.com),将提供这个项目页面。我需要myexample.com和www.myexample.com来提供这些项目页面。

GitHub页面帮助说要在DNS中创建A记录和CNAME记录。A记录是有意义的,但我不知道在我的DNS中做什么CNAME记录。

gh-pages文档说要为'charlie.github.com'做一个CNAME记录,这是一个用户页面存储库。我没有用户页面存储库-我只有一个项目存储库和gh-pages分支,我想用于myexample.com和www.myexample.com。

我是否需要创建一个用户页面存储库,以便可以将我的项目页面用于www.myexample.com和myexample.com?

我只是尝试一下,但我想确保这将工作,因为我已经www.myexample.com活,不想犯错误。

我发邮件给GitHub支持,他们的回复是

据我所知,你不能让两者指向同一页。

我很难相信他们只支持项目页面的A记录。

以前有人成功做到过吗?


1/23/19更新:

自从我上次回答问题以来,情况已发生了很大变化(向好的方向发展)。这个更新的答案将告诉你如何配置:

根尖(example.com) 子域(www.example.com) HTTPS(可选,但强烈鼓励)

最后,对example.com的所有请求将被重定向到https://www.example.com(如果您选择不使用HTTPS,则为http://)。我总是用www作为我的最终着陆。为什么(1,2),是另一个讨论。

这个答案很长,但并不复杂。我说得太啰嗦了,因为关于这个主题的GitHub文档并不清晰或线性。

步骤1:在GitHub设置中启用GitHub页面

从你的回购,点击标签 向下滚动到GitHub Pages部分。你有两个选择: 选择主分支将处理/README。Md作为你的web index.html。选择主分支/docs文件夹将处理/docs/README。Md作为你的web index.html。 选择一个主题。 请稍候,GitHub正在发布您的网站。通过单击“您的网站已准备好发布”旁边的链接来验证它是否有效

步骤2:在GitHub设置中指定自定义域

在这里输入您的自定义域名并点击保存:

这是一个微妙但重要的步骤。

如果您添加到GitHub Pages站点的自定义域是example.com,那么www.example.com将重定向到example.com 如果您添加到GitHub Pages站点的自定义域是www.example.com,那么example.com将重定向到www.example.com。

如前所述,我建议总是登陆www,所以我输入了www.example.com,如图所示。

步骤3:创建DNS表项

在您的DNS提供商的web控制台中,创建四条A记录和一条CNAME。

A @(又名根尖)的记录:

一些DNS提供商会让你指定@,其他的(如AWS Route 53)你会让子域为空来表示@。在任何一种情况下,这些是要创建的A记录:

185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

检查Github文档,确认这些是最新的ip。

创建一条CNAME记录,将www.example.com指向YOUR-GITHUB-USERNAME.github.io。

这是最令人困惑的部分。

注意YOUR-GITHUB-USERNAME不是GitHub回购名!YOUR-GITHUB-USERNAME的值由这个图表决定。

对于用户页面站点(很可能就是你自己的站点),CNAME条目将是username.github。io,例:

对于组织页面站点,CNAME条目将是orgname.github。io,例:

步骤5:确认DNS表项

通过dig +noall +answer example.com确认您的A记录。它应该返回4个185.x.x。x输入的IP地址。 通过运行dig www.example.com +nostats +nocomments +nocmd确认您的CNAME记录。它应该返回一个CNAME YOUR-GITHUB-USERNAME.github.io

解析/传播这些DNS条目可能需要一个小时左右的时间。一旦他们这样做了,打开你的浏览器http://example.com,它应该会重定向到http://www.example.com

步骤6:SSL (HTTPS)配置可选,但强烈推荐

自定义域工作后,返回到repo设置。如果您已经打开了设置页面,请硬刷新页面。

如果在强制HTTPS复选框下有一条消息,说明它仍在处理中,您将需要等待。您可能还需要点击自定义域部分中的保存按钮来启动强制HTTPS处理。

一旦处理完成,它看起来应该是这样的:

只需单击强制HTTPS复选框,并将浏览器指向https://example.com。它应该重新引导并打开https://www.example.com

就是这样!

GitHub将自动保持您的HTTPS证书最新,并应处理apex到www重定向到HTTPS。


截至2013年8月29日,Github的文件声称:

警告:像http://username.github.io/projectname这样的项目页面子路径不会被重定向到项目的自定义域。


概述

当涉及到项目页面时,文档有点令人困惑,而不是用户页面。感觉你应该做更多的事情,但实际上这个过程非常简单。

它包括:

为裸(无www)域设置2个静态A记录。 为www创建一个CNAME记录,它将指向一个GitHub URL。这将为你处理www重定向。 在gh-pages分支的项目根目录中创建一个名为CNAME(大写)的文件。这将告诉Github响应哪个URL。 等待一切繁殖。

你会得到什么

您的内容将通过http://nicholasjohnson.com格式的URL提供。

访问http://www.nicholasjohnson.com将返回一个301重定向到裸域。

重定向将尊重该路径,因此去往http://www.nicholasjohnson.com/angular的流量将被重定向到http://nicholasjohnson.com/angular。

每个存储库可以有一个项目页面,所以如果您的回购是开放的,您可以拥有任意多的项目页面。

流程如下:

1. 创建A记录

对于A记录,将@指向以下ip地址:

@: 185.199.108.153
@: 185.199.109.153
@: 185.199.110.153
@: 185.199.111.153

这些是静态的Github IP地址,您的内容将从中提供服务。

2. 创建CNAME记录

对于CNAME记录,将www指向你的用户名。github.io。注意后面的句号。还要注意,这是用户名,而不是项目名。您还不需要指定项目名称。Github将使用CNAME文件来决定从哪个项目提供内容。

e.g.

www: forwardadvance.github.io.

CNAME的目的是将所有的www子域流量重定向到一个GitHub页面,该页面将301重定向到裸域。

下面是我自己的网站http://nicholasjohnson.com:的配置截图

3.创建CNAME文件

在gh-pages分支的项目根目录中添加一个名为CNAME的文件。这应该包含您想要服务的域。确保你承诺并推动。

e.g.

nicholasjohnson.com

这个文件告诉GitHub使用这个repo来处理到这个域的流量。

4. 等待

现在等待5分钟,您的项目页面现在应该是活动的。


I just discovered, after a bit of frustration, that if you're using PairNIC, all you have to do is enable the "Web Forwarding" setting under "Custom DNS" and supply the username.github.io/project address and it will automatically set up both the apex and subdomain records for you. It appears to do exactly what's suggested in the accepted answer. However, it won't let you do the exact same thing by manually adding records. Very strange. Anyway, it took me a while to figure that out, so I thought I'd share to save everyone else the trouble.


我想分享我的步骤,这与rynop和superluminary提供的步骤有点不同。

A唱片公司是完全一样的,但是 而不是为www创建CNAME,我更喜欢重定向到我的空白域(非www)

该配置引用了首选域的引导。www到非www的域设置或反之,在每个域提供程序上可以是不同的。因为我的域在GoDaddy下,所以在域设置下,我使用子域转发(301)设置它。

作为指向Github存储库的域的结果,它将给出master和gh-page的所有url。

除了上面的CNAME文件,你可能需要完全绕过GitHub Pages上的Jekyll处理,在你的页面repo根目录下创建一个名为.nojekyll的文件。


如果你想知道如何让你的域名显示为www.mydomain.com,而不是将www请求重定向到 Mydomain.com,试试这个:

g -pages分支中的CNAME文件只有一行:

www.mydomain.com(而不是mydomain.com)

无论您对重定向的偏好如何(换句话说,无论在gs-pages分支上的CNAME文件中是什么),与您的DNS提供商一起,您都应该这样设置:

A      @    192.30.252.154
A      @    192.30.252.153
CNAME  www  username.github.io

简短的回答

这些详细的解释很好,但是OP(和我)的困惑可以用一句话来解决:“将DNS直接到你的GitHub用户名或组织,忽略特定的项目,并在你的项目存储库中添加适当的CNAME文件:GitHub将根据存储库中的文件向正确的项目发送正确的DNS。”


现在事情容易多了!

更新您的Apex域(@)记录到点

192.30.252.154 192.30.252.153

编辑你的自定义域域在你的github回购设置。

www等子域名可以更新为CNAME到apex域名。


所选的答案很好,但太长了,所以你可能看不清重点:

我在访问www.example.com时遇到了SSL错误,但如果我去example.com,它可以正常工作

如果同样的情况发生在你身上,可能你的错误是在DNS配置中设置:

CNAME www.example.com --> example.com  (WRONG)

但是,你要做的是:

CNAME www.example.com --> username.github.io  (GOOD)

or

CNAME www.example.com --> organization.github.io  (GOOD)

这是我的错误