Jekyll重定向整个目录

时间:2015-10-28 14:35:55

标签: redirect markdown jekyll github-pages

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

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

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

2 个答案:

答案 0 :(得分:2)

看看jekyll-redirect-from

只需添加到 _config.yml

gems:
 - jekyll-redirect-from

或者将其添加到 Gemfile

gem 'jekyll-redirect-from'

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

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

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

帖子示例

这适用于您具有旧路径路径的设置。在这种情况下,这是一个旧的Blogger帖子,其中包含 blogger_orig_url 和旧网址。

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

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

在查找和替换方面,您需要搜索旧路径存在的文本/实例并将其更改为新路径 - 基本上添加 redirect_from

_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/.

我不确切地知道你的帖子/页面有什么或者看起来像什么,当我将旧的Blogger帖子转换为Jekyll并且不想要的时候,我做了类似这个例子的事情。打破我帖子的旧链接。

答案 1 :(得分:1)

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

但是,您需要为每个文件执行此操作。没有“全能”的解决方案。

简单示例布局文件:

<!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>中的行将执行实际重定向。
  • 如果重定向不起作用,正文中的行只会显示一条很好的消息。

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

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

就是这样 正如我在开头所说:你需要为旧文件夹中的数百个文件中的每个文件执行此操作 我也有同样的问题,所以我写了一个一次性的脚本来做它。

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