我将我的 jekyll _site 文件夹推送到我服务器的子文件夹 /blog 中,如何修复所有资产和链接?

I pushed my jekyll _site folder to my server in a subfolder /blog, how to fix all assets and links?

有没有办法配置 jekyll,以便在 _site 文件夹中构建静态文件时调整所有 assets/urls 以便它在子文件夹中工作?

我的设置是这样的:

www.example.com/

我将所有 _site files/folders 推送到一个子目录:

www.example.com/blog/

所以现在当我查看我的网站时,所有 css/images 都没有呈现,因为它们都指向 :

 <link rel="stylesheet" href="/assets/vendor/bootstrap/css/bootstrap.min.css">

但正确的URL应该是:

/blog/assets/vendor/bootstrap/css/bootstrap.min.css

我为此使用 nginx,我创建了一个位置部分,如:

 location ^~ /blog/ {
      alias /home/deploy/apps/_site/;
   }

您是否尝试过在 Jekyll 中使用 baseurl 设置?在 GH 上托管项目时,它基本上是像您尝试做的那样从子文件夹中提供服务,baseurl 是处理它的常用方法。

在你的配置文件中设置基础url:

baseurl: /blog

然后更新您的模板以使用 Jekyll 的 relative_url 过滤器正确引入 baseurl 设置。例如:

<link rel="stylesheet" href="{{ 'assets/css/site.css' | relative_url }}">

或其他地方

{{ page.url | relative_url }}

一个不太稳健的解决方案是直接在所有 url 前面加上 {{ site.baseurl }},例如:

<link rel="stylesheet" href="{{ site.baseurl }}/assets/css/site.css">

使用 baseurl 构建 url 的方法有很多种 - 这些只是其中的几种。

如果您的网站已经完成并且 none 的链接中内置了基础 url,那么除了继续更新所有链接之外,没有简单的方法可以添加它。

就是说,baseurl 并没有太多神奇之处 - 除了在需要更改时将其放在一个编辑位置之外。还有一些关于 jekyll serve 的东西可以帮助网站在进行本地开发工作时更好地在浏览器中工作(我相信 serve 和 build treat baseurl 略有不同)。