Nginx 我在一个子文件夹/博客中将我的jekyll_站点文件夹推送到我的服务器,如何修复所有资产和链接?

Nginx 我在一个子文件夹/博客中将我的jekyll_站点文件夹推送到我的服务器,如何修复所有资产和链接?,nginx,jekyll,Nginx,Jekyll,有没有办法配置jekyll,以便它在_site文件夹中构建静态文件时调整所有资产/URL,使其在子文件夹中工作 我的设置如下: www.example.com/ 我将所有站点文件/文件夹推送到一个子目录: www.example.com/blog/ 因此,现在当我查看我的站点时,所有css/图像都没有呈现,因为它们都指向: <link rel="stylesheet" href="/assets/vendor/bootstrap/css/bootstrap.min.css">

有没有办法配置jekyll,以便它在_site文件夹中构建静态文件时调整所有资产/URL,使其在子文件夹中工作

我的设置如下:

www.example.com/
我将所有站点文件/文件夹推送到一个子目录:

www.example.com/blog/
因此,现在当我查看我的站点时,所有css/图像都没有呈现,因为它们都指向:

 <link rel="stylesheet" href="/assets/vendor/bootstrap/css/bootstrap.min.css">
为此,我使用nginx,并创建了一个位置部分,如:

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

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

在配置文件中设置baseurl:

baseurl: /blog
然后更新模板,使用Jekyll的
相对url
过滤器正确导入
baseurl
设置。例如:

<link rel="stylesheet" href="{{ 'assets/css/site.css' | relative_url }}">
一个不太可靠的解决方案是直接用
{{site.baseurl}}
在所有URL前面加上前缀,如下所示:

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

使用
baseurl
构建url的方法有很多种——这些只是其中的一部分

如果您的站点已经完成,并且没有一个链接内置了baseurl,那么除了去更新所有链接之外,没有其他简单的方法可以添加它


这就是说,baseurl并没有什么神奇之处——除了在需要更改时将其作为一个编辑位置。这与jekyll serve有关,它可以帮助网站在进行本地开发工作时更好地在浏览器中工作(我认为服务和构建对baseurl的处理略有不同)。

我认为@ashmaroli编辑我的答案时,在相对url示例中的资产之前应该有一个
/
,但我不确定,因为我没有使用它。我怀疑它在添加/,如果它是空的或在字符串末尾,baseurl通常不包含/。
relative\u url
过滤器会添加所需的斜杠,并删除任何不必要的斜杠。。
{{ page.url | relative_url }}
<link rel="stylesheet" href="{{ site.baseurl }}/assets/css/site.css">