在 Jekyll 和 gitHub 页面重定向旧页面的最佳方法是什么?

我在 Github 上有博客 Jekyll

解决 URL 策略迁移的最佳方法是什么?

我发现最好的实践就是像这样创建 htaccess

Redirect 301 /programovani/2010/04/git-co-to-je-a-co-s-tim/ /2010/04/05/git-co-to-je-a-co-s-tim.html

但它似乎并不适用于 Github。我发现的另一个解决方案是创建 rake 任务,它将生成重定向页面。但是因为它是一个 html,它不能发送 301头,所以 SE 爬虫不会识别它作为一个重定向。

18482 次浏览

由于 github 不允许301重定向(这并不奇怪) ,你必须在移动到新的 URL 结构(和搜索引擎命中)和保持 URL 原样之间做出选择。我建议你赶紧行动。让搜索引擎的芯片随他们去吧。如果有人通过搜索引擎点击了你的旧链接,他们会被重定向到新的位置。随着时间的推移,搜索引擎会接受你的改变。

您可以做的一些事情,以帮助事情是创建一个 网站地图,您只列出您的新页面,而不是旧的。这将加快用新 URL 替换旧 URL 的速度。此外,如果所有旧的 URL 都在“/Programovani”目录中,还可以使用 Txt 文件告诉将来的爬虫应该忽略该目录。例如:

User-agent: *
Disallow: /programovani/

搜索引擎需要一段时间才能跟上这些变化。这没什么大不了的。只要旧的 URL 仍然存在并将实际用户重定向到活动页面,就没有问题。

最好的选择是通过在 _ config.yml 中设置永久链接格式来匹配您的旧博客,从而完全避免更改 URL。

除此之外,最完整的解决方案是生成重定向页面,但不一定值得这样做。最后,我只是使我的404页面更友好一些,使用 javascript 来猜测正确的新 URL。它对搜索没有任何作用,但是实际用户可以到达他们所寻找的页面,并且在剩余的代码中没有遗留的东西需要支持。

Http://tqcblog.com/2012/11/14/custom-404-page-for-a-github-pages-jekyll-blog/

你试过 Jekyll 别名生成器插件吗?

你把别名网址放在 YAML 的头版:

---
layout: post
title: "My Post With Aliases"
alias: [/first-alias/index.html, /second-alias/index.html]
---

当用户访问其中一个别名 url 时,它们通过 meta 标记刷新被重定向到主 url:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="0;url=/blog/my-post-with-aliases/" />
</head>
</html>

关于这个主题,请参阅 这篇博文

此解决方案允许您通过以下方式使用真正的 HTTP 重定向。Htaccess ー不过,不涉及。Htaccess 将在 GitHub 页面上工作,因为它们不使用 Apache。

截至2014年5月的 GitHub 页面支持重定向,但根据 Jekyll-redirect-来自 Gem 文档他们仍然是基于 HTTP-刷新(使用 <meta>标签) ,这需要一个完整的页面加载才能发生重定向。

我不喜欢 <meta>方法,所以我迅速为任何希望在。使用 Apache 访问 htaccess 文件,该文件服务于一个预生成的 Jekyll 站点:


首先,将 .htaccess添加到 _config.yml中的 include属性

include: [.htaccess]

接下来,创建一个。Htaccess 文件,并确保包含 YAML 的头条新闻。这些破折号非常重要,因为现在 Jekyll 将使用液体解析文件,这是 Jekyll 的模板语言:

---
---
DirectoryIndex index.html


RewriteEngine On
RewriteBase /


...

确保你需要重定向的文章有如下两个属性:

---
permalink: /my-new-path/
original: blog/my/old/path.php
---

现在在. htaccess 中,只需添加一个循环:

{% for post in site.categories.post %}
RewriteRule ^\{\{ post.original }} \{\{ post.permalink }} [R=301,L]
{% endfor %}

这将动态生成。在每次构建站点时,都可以访问 htaccess,并且配置文件中的 include可以确保。Htaccess 使它进入 _site目录。

RewriteRule ^blog/my/old/path.php /my-new-path/ [R=301,L]

从那里开始,由您使用 Apache 为 _site提供服务。我通常将完整的 Jekyll repo 克隆到一个非 webroot 目录中,然后我的 vhost 是到 _site文件夹的符号链接:

ln -s /path/to/my-blog/_site /var/www/vhosts/my-blog.com

当当当!现在 Apache 可以从您的虚拟根目录中提供 _ site 文件夹,完成。Htaccess 支持的重定向,可以使用任何您想要的 HTTP 响应代码!

你甚至可以在每篇文章的前面使用一个 redirect属性来指定在你的文章中使用哪个重定向代码。Htaccess 循环。

正如其他人所提到的,最好的解决方案是保留工作 URL 或复制页面并指定 规范 URL。

由于 github 页面不支持真正的重定向,我选择在 Heroku 上设置 路由器,以便将301(永久)重定向从我站点的旧域返回到新域。我在这里描述了细节:

Http://joey.aghion.com/simple-301-redirects/

Jekyll 在过去的几个月里经历了一些重大的更新,所以当这个问题最初发布的时候,也许这是不可能的..。

Jekyll 支持博客文章的 YAML 前端部分中的 permalink属性。您可以指定您希望您的文章拥有的 URL,Jekyll 将在生成您的站点时使用该 URL (而不是文件名)。

---
title: My special blog post
permalink: /programovani/2010/04/git-co-to-je-a-co-s-tim
---
My blog post markdown content

最好的解决方案是同时使用 <meta http-equiv="refresh"<link rel="canonical" href=

它的工作非常好,谷歌机器人重新索引我的整个网站下新的链接没有失去位置。此外,用户被重定向到新的职位立即。

<meta http-equiv="refresh" content="0; url=http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/">
<link rel="canonical" href="http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/" />

使用 <meta http-equiv="refresh"将重定向每个访问者到新的职位。 至于 Google Bot,它将 <link rel="canonical" href=视为301重定向,其效果是你得到你的页面重新索引,这就是你想要的。

我在这里描述了我如何将我的博客从 Wordpress 迁移到 Octopress 的整个过程。 Http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/#redirect-301-on-github-pages

重定向插件

Https://github.com/jekyll/jekyll-redirect-from#redirect-to

它得到了 GitHub 的支持,并且很容易实现:

_ config.yml

gems:
- jekyll-redirect-from

AMD

---
permalink: /a
redirect_to: 'http://example.com'
---

解释: https://help.github.com/articles/redirects-on-github-pages/

现在:

firefox localhost:4000/a

将重定向到 example.com

只要页面定义了 redirect_to,插件就会接管。

在 GitHub 页面 v64上测试。

注意 : 这个版本最近修复了一个严重的 bug,它错误地重用了重定向的默认布局: < a href = “ https://github.com/jekyll/jekyll-redirect-from/pull/106”rel = “ norefrer”> https://github.com/jekyll/jekyll-redirect-from/pull/106

手动布局方法

如果你不喜欢使用 https://github.com/jekyll/jekyll-redirect-from,你可以很容易地自己实现它:

AMD

---
layout: 'redirect'
permalink: /a
redir_to: 'http://example.com'
sitemap: false
---

基于 从 HTML 页面重定向_layouts/redirect.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Redirecting...</title>
{% comment %}
Don't use 'redirect_to' to avoid conflict
with the page redirection plugin: if that is defined
it takes over.
{% endcomment %}
<link rel="canonical" href="\{\{ page.redir_to }}"/>
<meta http-equiv="refresh" content="0;url=\{\{ page.redir_to }}" />
</head>
<body>
<h1>Redirecting...</h1>
<a href="\{\{ page.redir_to }}">Click here if you are not redirected.<a>
<script>location='\{\{ page.redir_to }}'</script>
</body>
</html>

像这个例子一样,redirect-from插件不生成301,只生成 meta + JavaScript 重定向。

我们可以证实这是怎么回事:

curl localhost:4000/a