【问题标题】:Baseurl behavior differs between localhost and github pages in JekyllJekyll 中 localhost 和 github 页面的 Baseurl 行为不同
【发布时间】:2015-07-24 09:38:15
【问题描述】:

我正在使用Jekyll 开发一个静态站点,以部署在github pages 上。我在使用配置文件中的 baseurl 时遇到问题。这是我的_config.yml 的摘录:

baseurl: "/blog"
url: "http://remidoolaeghe.github.io"

当在http://localhost:4000/blog/ 本地运行时,一切都很好。找到html页面,加载资源(图片、css、js)并应用到页面上。

一旦部署到Github Pages,我希望该站点可以在:http://remidoolaeghe.github.io/blog 但实际网址是http://remidoolaeghe.github.io

Jekyll 上的 Github Pages 似乎没有使用 baseurl。 HTML 页面不在预期的 URL 上,任何资源也不在(css、图像等)。浏览器不会加载任何基于 baseurl 的内容,如您在此处看到的:

我检查了使用过的Jekyll version。我用的和Github Pages(2.4.0)一样。

我错过了什么吗?

我的Githubrepo 可以找到here

【问题讨论】:

    标签: jekyll github-pages base-url


    【解决方案1】:

    我遇到了同样的问题,我的 kitty image 在 localhost 中显示得很可爱,但在 github 页面中丢失了 404 错误,并且路径名错误地丢失了 baseurl。我在kitty-image-problem-solved解决了。

    简而言之,为了让您的 /img/avatar.png 出现在您的 _posts/ 帖子中,您应该这样做

       ![Paris]( {{"/img/avatar.png" | relative_url }})
    

    relative_url的文档在jykyll-liquid-filters

    【讨论】:

      【解决方案2】:

      重定向到/blog 的另一种方法是:

      1. GitHub 页面重定向来自

      GitHub 页面允许使用 redirect-from Jekyll 插件,如 here 所述。您可以使用他们的plugin 并从那里重定向。尽管它是为防止旧链接进入 404 而构建的,但考虑到您的用例,这可能不是您想要的。

      2。在您的根目录中手动添加元刷新标签 index.html

      <META http-equiv="refresh" content="0;URL=/blog/">
      

      您需要在&lt;head&gt; &lt;/head&gt; 中添加该标签。这将告诉您对根 url 的任何请求指向存储在/blog/index.html。这是一种快速的方法,类似于.htaccessrewrites are done,除了 GitHub Pages 出于安全原因不支持 .htaccess。那时还要检查您是否获得了404s 的某些资源并相应地更新它们的路径,也许在site.baseurl 的帮助下,正如另一个答案所解释的那样。 baseurl 不是你想的那样。见this post by Parker about the baseurl variable

      简而言之, 我认为您最好的选择是使用第二个,而不是创建一个 gh-pages blog 存储库并将您的站点移到那里。事实上,如果您确实转移到了一个单独的博客仓库,这可能会使事情变得复杂,您仍然需要重定向 http://remidoolaeghe.github.io 以指向 http://remidoolaeghe.github.io/blog 或者访问 http://remidoolaeghe.github.io 的人而不是/blog 链接只得到一个空白页。

      【讨论】:

      • 我明白你的意思。你让我想知道我真正想要的是什么。实际上,我希望在我的网站上有一个“博客”部分和一个“非博客”部分。我想我必须转移到博客 github 存储库,这样我仍然可以从博客部分链接非博客部分(带有超链接),反之亦然。你认为我可以有一个 repo 生成网站的一部分,可以在remidoolaeghe.github.io 访问,另一个指向remidoolaeghe.github.io/blog 并从访问者的角度制造出这是一个单一网站的错觉?
      • 嗯,你当然可以有一个普通的 GitHub Pages 仓库,它可以在普通的 github.io 域中访问,然后有指向你的第二个仓库的超链接,这是一个名为 gh-pages 的仓库bloghelp.github.com/articles/creating-project-pages-manually 但除了必须推送两次之外,最好将所有内容放在一个存储库中并在博客上发布帖子,除非您觉得管理 2 个存储库更好
      • 当然访问者会将其视为一个网站,前提是您具有相同的样式和设计,我假设您不想要相同的网站,因为您想要 2 个存储库? (因为如果您确实想要相同的设计,您最好管理一个 repo?)
      • 当然,我想避免管理 2 个存储库。在一个完美的世界里,我希望我的帖子(和一个索引页面)进入 /blog 目录,这样“/blog”就会出现在 URL 中。也许我应该只使用配置文件中的permalink 选项来让我的帖子和我的索引在/blog/suffix 上可用?
      • @RémiDoolaeghe 我会选择永久链接选项。 (这就是我实际上正在做的)
      【解决方案3】:

      jekyll 使用baseurl 来构造相对于您网站根目录的url。例如:&lt;link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}"&gt;.

      github页面不使用它来生成您的站点路径。

      为了通过http://remidoolaeghe.github.io/blog 访问您的博客,您需要将其移动到博客 存储库中。

      【讨论】:

      • 这很奇怪,因为我在本地部署的站点运行良好。它不在 /blog 文件夹中,只是在其默认的 _site 文件夹中。区别在哪里?
      猜你喜欢
      • 2017-01-10
      • 1970-01-01
      • 2017-11-12
      • 2021-08-11
      • 2021-05-08
      • 2017-08-02
      • 2013-06-26
      • 2019-02-19
      • 2018-04-01
      相关资源
      最近更新 更多