GitHub页面和相对路径

see*_*per 65 html github

gh-pages为GitHub正在开发的项目创建了一个分支.

我使用Sublime文本在本地创建网站,我的问题是当它被推送到GitHub时,所有到javascrips,images和css文件的链接都是无效的.

例如,我在脑海中有这个.

<link href="assets/css/common.css" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)

这在本地工作得很好,但它不适用于GitHub,因为链接未使用存储库名称作为URL的一部分进行解析.

它要求:

http://[user].github.io/assets/css/common.css
Run Code Online (Sandbox Code Playgroud)

什么时候应该要求:

http://[user].github.io/[repo]/assets/css/common.css.
Run Code Online (Sandbox Code Playgroud)

我当然可以将repo名称作为URL的一部分,但这会阻止我的站点在开发期间在本地工作.

知道怎么处理这个吗?

Anu*_*v C 66

你需要使用Jekyll.

相关文档中逐字复制:

有时在将gh-pages分支推送到GitHub 之前预览您的Jekyll网站是很好的 .但是,GitHub用于项目页面的子目录式URL结构使URL的正确解析变得复杂.这是一种利用GitHub项目页面URL结构(username.github.io/project-name/)的方法,同时保持在本地预览Jekyll站点的能力.

  1. _config.yml,将baseurl选项设置为/project-name- 记下前导斜杠和没有尾部斜杠.

  2. 在引用JS或CSS文件时,请执行以下操作:{{ site.baseurl}}/path/to/css.css- 注意紧跟在变量之后的斜杠(在"path"之前).

  3. 在执行固定链接或内部链接时,请执行以下操作:{{ site.baseurl }}{{ post.url }}- 请注意,两个变量之间没有斜杠.

  4. 最后,如果您想在提交/部署使用之前预览您的站点jekyll serve,请确保将空字符串传递给该--baseurl选项,以便您可以localhost:4000正常查看所有内容 (在开头没有/ project-name): jekyll serve --baseurl ''

这样,您可以从localhost上的站点根目录本地预览您的站点,但是当GitHub从gh-pages 分支机构生成您的页面时,所有URL都将从/project-name正确开始并正确解析.

(显然有人在几个月前才发现这一点.)

  • 是的,这个应该是公认的答案.对于常见的Jekyll用例来说似乎有点复杂 - 我想知道他们是否有默认使用site.baseurl的原因? (4认同)
  • 虽然这已经有好几年了,而且文档也发生了变化,但这个解决方案对我来说比Jekyll文档中使用`{{site.github.url}}所建议的更有用. (3认同)

Iva*_*zak 12

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

<link href="assets/css/common.css" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)

在HTML文档中http://www.foo.com/bar/doc.html,链接assets/css/common.css将通过将其附加到HTML文档的URL的前缀而不是路径的最后部分(没有doc.html)来解析,即链接将解析为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">.该链接正确解析为http://twitter.github.io/bootstrap/assets/css/bootstrap.css,即它确实包含回购名称.

  • 你如何处理`href =“ /”`? (2认同)

Von*_*onC 6

这不应该是2016年12月,3年半之后的问题.
请参阅Ben Balter出版的" GitHub页面的相对链接 " :

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

(即2013年1月起)

现在,这些链接将在通过GitHub Pages发布时继续有效.

如果您的存储库中有Markdown文件docs/page.md,并且您想要从该文件链接到docs/another-page.md,则可以使用以下标记执行此操作:

[a relative link](another-page.md)
Run Code Online (Sandbox Code Playgroud)

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

在幕后,我们使用开源的Jekyll Relative Links插件,默认情况下为所有版本激活.

GitHub页面上的相对链接还考虑permalink: /docs/page/了文件的YAML前端内容中的自定义永久链接(例如),并在适当时预先添加项目页面的基本URL,以确保链接在任何上下文中继续有效.

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

201612月起,您甚至不需要Jekyllindex.md.简单的降价文件就足够了.


小智 6

你可以放

<base href="/[repo]/">
Run Code Online (Sandbox Code Playgroud)

<head>标签的内部,它可以解决问题。

您还可以通过设置以下内容来改进此解决方案:

<base href="{{ site.baseurl }}/">
Run Code Online (Sandbox Code Playgroud)

然后设置site.baseurl为空字符串以进行本地测试。