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

时间:2018-11-16 15:01:02

标签: nginx jekyll

是否可以配置jekyll,以便在_site文件夹中构建静态文件时可以调整所有资产/ URL,使其可以在子文件夹中工作?

我的设置是这样的:

www.example.com/

我将所有_site文件/文件夹推送到一个子目录:

www.example.com/blog/

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

 <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/;
   }

1 个答案:

答案 0 :(得分:1)

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

在您的配置文件中设置基本网址:

baseurl: /blog

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

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

或其他地方

{{ page.url | relative_url }}

一种较不健壮的解决方案是直接在所有网址前面加上{{ site.baseurl }},例如:

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

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

如果您的网站已经完成,并且没有任何链接内置有baseurl,那么除了访问和更新所有链接之外,没有其他简单的方法可以添加它。

也就是说,baseurl并没有太多魔力-除非需要更改,否则只能将其放在一个地方进行编辑。那与jekyll服务有关,可以在进行本地开发工作时帮助网站更好地在浏览器中工作(我相信,服务和构建对baseurl的处理略有不同)。

相关问题