Jekyll 重定向整个目录

Jekyll redirect entire directory

我想将 /old/folder/struct/* 重定向到 /new/fold/struc/*

我知道 jekyll 在编译时运行,因此它无法在运行时真正捕获 URL。我正在寻找一种创造性的解决方法。

最好是可以在 GitHub 页面上运行的页面(这意味着 htaccess 是不可能的)。

看看jekyll-redirect-from

只需添加到您的 _config.yml:

gems:
 - jekyll-redirect-from

或者将其添加到您的 Gemfile:

gem 'jekyll-redirect-from'

然后对于您要重定向的任何页面或 post:

title: My amazing post
redirect_from:
  - /old/folder/struct
  - /new/fold/struct

我确实注意到你有一个通配符,所以在旧的文件夹结构下可能还有一些其他的 URLS,在这种情况下我建议你在你的项目中进行查找和替换。

帖子示例

这在您具有旧路径的设置的情况下有效。在这种情况下,这是一个旧的 Blogger post,它有 blogger_orig_url 和旧的 URL.

此示例将 html 文件的路径重定向为 Jekyll 的新 URL 格式。

我认为 Jekyll 中没有简单的解决方案,因为它主要生成静态网站。

在查找和替换方面,您需要在旧路径存在的地方搜索 text/instances 并将其更改为新路径——基本上添加 redirect_from.

示例 post 在 _posts/ 文件夹中:

---
layout: post
title: 'My New Post'
date: '2005-01-04T10:29:00.002-06:00'
author: John Doe
tags:
- Music
modified_time: '2005-01-11T04:05:03.224-06:00'
thumbnail: http://foobar.com/foo.jpg
blogger_orig_url: http://www.foobar.com/2005/01/my-new-post.html
redirect_from: /2005/01/my-new-post.html
---

Sample text here. This post should be under path /2005/01/my-new-post/.

我不知道你的 posts/pages 有什么或长什么样,当我将一个旧的 Blogger posts 转换为 Jekyll 时,我做了类似这个例子,但没有我不想断开指向我的 post 的旧链接。

我正在使用一个简单的 meta refresh,内置在我的默认布局文件中。

不过,您需要对每个文件都执行此操作。没有 "catch-all" 解决方案。


简单示例布局文件:

<!DOCTYPE html>
<html>
<head>
    <title>{{ page.title }}</title>
    {% if page.redirect %}<meta http-equiv="refresh" content="0; url={{ page.redirect }}">{% endif %}
</head>
<body>
    <h1>{{ page.title }}</h1>
    {% if page.redirect %}<h3> Redirecting to <a href="{{ page.redirect }}">{{ page.redirect }}</a> ...</h3>{% endif %}
    {{ content }}
</body>
</html>
  • <head> 中的行将执行实际的重定向。
  • 正文中的行只是显示一条很好的消息,以防重定向不起作用。

使用这样的布局文件,您可以创建一个文件,该文件将重定向到另一个 URL,只需两行 YAML 前端内容:

---
layout: default
redirect: /new/fold/struc/foo.html
---

就这些了。
正如我一开始所说:您需要对旧文件夹中的数百个文件中的每一个执行此操作。
我也遇到了同样的问题,所以我写了一个一次性的脚本来解决。


我还写了一篇关于这种方法的博客post:
Easy meta redirects with Jekyll