blogdown 中的 baseUrls、重定向和重写

baseUrls, redirects and rewrites in blogdown

你好 blogdown Whosebug 社区!

我最近一直在将我的个人 GitHub/Jekyll 博客 (https://blogs.nopcode.org/brainstorm) 迁移到 Blogdown/Netlify,但我对 _redirectsconfig.tomlurl路由业务。

我已经详细阅读了官方博客down和netlify documentations

还有一辉在good permalink hygiene

上的推荐

不幸的是,无论我尝试多少合理的更改(主要是 config.toml_redirects),我都无法从 Jekyll 成功迁移,因为:

  1. 访问 https://blogs.nopcode.org/brainstorm 会导致所有博文 link 呈现为 https://blogs.nopcode.org/brainstorm/brainstorm/2017-09-01-blogpost-etc(URL 中有两个 brainstorm 而不是一个)。我希望我所有的博文都达到 link 到 https://blogs.nopcode.org/brainstorm/2017-09-01-blogpost-etc(只是一次头脑风暴)。现在我正在做一个 URL 重写,这样当用户点击其中一个 brainstorm/brainstorm links 时,它会被重写为简单的 brainstorm... 显然不是最理想的.
  2. 我必须将部分主题 (js/images/css/etc..) 移动到 static/brainstorm/ 下,以便加载主题资产并找到那些 URLs.

这是我博客的回购协议,如果你发现其中有明显的缺陷:

https://github.com/brainstorm/brainblog

还有一连串的更改,我尝试在没有太多扭曲的情况下追求可接受的配置:

https://github.com/brainstorm/brainblog/commits/master

综上所述,我发现 Hugo/blogdown 超级快,RStudio 插件 menu/interface 超级方便,可以快速更改博文:)

在此先致谢!

这里的问题是因为 brainstorm 上的帖子有一个相对路径,并且您将基础 url 设置为 https://blogs.nopcode.org/brainstorm

Hugo 将根据主题配置构建您到 baseURL 的相对路径,Netlify 将发布相对于站点根目录的 public 目录。

Hugo 服务器在 brainstorm/brainstorm 本地向您显示正确的链接,因为它根据 baseURL 配置路径。

Netlify 路径来自已发布站点的根目录,并且不知道 Hugo 配置。在 Netlify 上,帖子的路径位于 /brainstorm.

可能的解决方案

  • 为您网站的主页创建一个布局,以创建列表,就像主题为一个部分所做的那样。

  • 将所有帖子放入内容根目录并删除 brainstorm 文件夹

  • netlify.toml
  • 中使用 hugo -d public/brainstorm 将 Hugo 构建到 public/brainstorm

content 文件夹的根目录下创建 _index.md 文件,其中包含您要在页面上使用的任何前文数据(如果有)。

在项目存储库的根目录下创建一个 layouts/index.html 文件。

{{ partial "header.html" . }}

<main class="content" role="main">

  <div class="archive">
    {{ range .Data.Pages.GroupByDate "2006" }}
    <h2 class="archive-title">{{ .Key }}</h2>
    {{ range .Pages }}
    <article class="archive-item">
      <a href="{{ .RelPermalink }}" class="archive-item-link">{{ .Title }}</a>
      <span class="archive-item-date">
        {{ .Date.Format "2006/01/02" }}
      </span>
    </article>
    {{ end }}
    {{ end }}
  </div>

</main>

{{ partial "footer.html" . }}