Jekyll 重定向整个目录
Jekyll redirect entire directory
我想将 /old/folder/struct/*
重定向到 /new/fold/struc/*
。
我知道 jekyll 在编译时运行,因此它无法在运行时真正捕获 URL。我正在寻找一种创造性的解决方法。
最好是可以在 GitHub 页面上运行的页面(这意味着 htaccess 是不可能的)。
只需添加到您的 _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
我想将 /old/folder/struct/*
重定向到 /new/fold/struc/*
。
我知道 jekyll 在编译时运行,因此它无法在运行时真正捕获 URL。我正在寻找一种创造性的解决方法。
最好是可以在 GitHub 页面上运行的页面(这意味着 htaccess 是不可能的)。
只需添加到您的 _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