GitHub页面和相对path

我为在GitHub上工作的项目创build了一个gh-pages分支。

我使用Sublime文本在本地创build网站,我的问题是,当这被推送到GitHub,javascrips,图像和css文件的所有链接是无效的。

例如,我在我的头部有这个。

 <link href="assets/css/common.css" rel="stylesheet"> 

这在本地运行良好,但是它不能从GitHub工作,因为链接没有使用存储库名称作为URL的一部分来parsing。

它要求:

 http://[user].github.io/assets/css/common.css 

何时应该要求:

 http://[user].github.io/[repo]/assets/css/common.css. 

我当然可以把回购名称作为url的一部分,但是这会阻止我的网站在开发过程中在本地工作。

任何想法如何处理这个?

你使用哪个浏览器? 你确定会发生这种情况吗? 因为它不应该。 如果在链接中包含相对URL,则将相对于包含链接的文档的URL进行parsing。 换句话说,当你包括

 <link href="assets/css/common.css" rel="stylesheet"> 

http://www.foo.com/bar/doc.html的HTML文档中, assets/css/common.css的链接将通过追加到HTML文档的URL的前缀而得到解决部分path(没有doc.html ),即链接将parsing为http://www.foo.com/bar/assets/css/common.css ,而不是http://www.foo.com/assets/css/common.css

例如,查看Twitter Bootstrap网页的源代码: http : //twitter.github.io/bootstrap/ 。 注意顶部的样式链接,指定为<link href="assets/css/bootstrap.css" rel="stylesheet"> 。 该链接正确parsing为http://twitter.github.io/bootstrap/assets/css/bootstrap.css ,即它包含回购名称。

你需要使用Jekyll 。

从相关文件逐字复制:

在将gh-pages分支推送到GitHub之前,有时预览您的Jekyll网站是件好事。 然而,GitHub用于Project Pages的类似于子目录的URL结构使URL的正确parsing复杂化了。 这里有一个方法来利用GitHub项目页面的URL结构( username.github.io/project-name/ ),同时保持在本地预览你的Jekyll站点的能力。

  1. _config.yml ,将baseurl选项设置为/project-name – 注意前导斜线和缺less斜线。

  2. 当引用JS或CSS文件时,可以这样做: {{ site.baseurl}}/path/to/css.css – 注意紧跟在variables之后的斜杠(就在“path”之前)。

  3. 当做永久链接或内部链接,做这样的事情: {{ site.baseurl }}{{ post.url }} – 请注意,两个variables之间没有斜线。

  4. 最后,如果您希望在使用jekyll serve进行提交/部署之前预览您的站点,请确保将一个空string传递给--baseurl选项,以便您可以在localhost:4000正常查看所有内容(不带/项目名称在开始): jekyll serve --baseurl ''

这样,您可以从localhost的本地根目录预览您的站点,但是当GitHub从gh-pages分支生成您的页面时,所有的URL将以/project-name开头并正确parsing。

(显然有人在几个月前才知道这一点。)

三年半后的2016年12月,这不应该成为一个问题。
请参阅Ben Balter发布的“ GitHub页面的相对链接 ”:

在GitHub.com上创作Markdown 一段时间后,您已经能够使用相对链接了 。

(即从2013年1月起)

现在,这些链接将继续通过GitHub页面发布工作。

如果您在docs/page.md资源库中有一个Markdown文件,并且您希望将该文件链接到docs/another-page.md ,则可以使用以下标记执行此操作:

 [a relative link](another-page.md) 

当您在GitHub.com上查看源文件时,相关链接将继续工作,就像以前一样,但是现在,当您使用GitHub Pages发布该文件时,该链接将被静默地转换为docs/another-page.html以匹配目标网页的发布url。

在引擎盖下,我们使用了开源的Jekyll相对链接插件,默认情况下所有插件都是激活的。

GitHub页面上的相关链接也考虑到文件的YAML前端中的自定义永久链接(例如, permalink: /docs/page/ ),以及在适当的时候预先添加项目页面的基本URL,以确保链接在任何情况下继续工作。

不要忘记, 自2016年8月以来,您可以直接从master分支发布您的页面 (并不总是gh-pages分支)

而自2016年12月以来,你甚至不需要Jekyllindex.md 。 简单的降价文件就够了。

另一种select是为github.io网页专门创build一个新的回购协议。 如果您在github [user].github.io repo [user].github.io[user].github.io ,那么它将在https://[user].github.io ,您可以避免在URLpath中完全具有repo名称 。 显然,缺点是每个github用户只能有1个这样的repo,所以可能不适合你的需求,我不确定。

看来,Github页面不是很响应。 虽然它立即使新文件可用,但由于caching或其他原因,修改后的文件不会立即显示。

等了15分钟左右,一切都很好。