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站点的能力。
在
_config.yml
,将baseurl
选项设置为/project-name
– 注意前导斜线和缺less斜线。当引用JS或CSS文件时,可以这样做:
{{ site.baseurl}}/path/to/css.css
– 注意紧跟在variables之后的斜杠(就在“path”之前)。当做永久链接或内部链接,做这样的事情:
{{ site.baseurl }}{{ post.url }}
– 请注意,两个variables之间没有斜线。最后,如果您希望在使用
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月以来,你甚至不需要Jekyll
或index.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分钟左右,一切都很好。