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

我在github网页上有博客 - jekyll

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

我发现最常见的做法是像这样创建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抓取工具不会将其识别为重定向。


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

它运行得非常好,Google Bot将我的整个网站重新编入新链接,而不失位置。 用户也会立即重定向到新帖子。

<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的博客从WordPress转移到Octopress的。 http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/#redirect-301-on-github-pages


你有没有试过Jekyll Alias Generator插件?

你把这个别名URL放在YAML的帖子前面:

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

当用户访问其中一个别名url时,他们通过元标记刷新被重定向到主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>

另请参阅此主题的博客文章。


此解决方案允许您通过.htaccess使用真正的HTTP重定向 - 但是,没有任何涉及.htaccess的内容可用于GitHub页面,因为它们不使用Apache。

截至2014年5月,GitHub Pages支持重定向,但根据来自Gem文档的jekyll-redirect,它们仍然基于HTTP-REFRESH(使用<meta>标签),在重定向发生之前需要全页加载。

我不喜欢<meta>方法,因此我为任何希望在使用Apache的.htaccess文件内提供真实HTTP 301重定向的人提供解决方案,该服务器提供预生成的Jekyll站点:


首先,将.htaccess添加到_config.ymlinclude属性

include: [.htaccess]

接下来,创建一个.htaccess文件,并确保包含YAML前端事宜。 这些破折号很重要,因为现在Jekyll会用Liquid,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目录中,然后我的虚拟主机是到_site文件夹的符号链接:

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

田田! 现在,Apache可以从虚拟根目录服务_site文件夹,并使用.htaccess支持的重定向,这些重定向使用您希望的任何HTTP响应代码!

你甚至可以获得超级幻想,并在每个帖子的前端内容中使用redirect属性来指定在你的.htaccess循环中使用哪个重定向代码。

链接地址: http://www.djcxy.com/p/89077.html

上一篇: What is the best approach for redirection of old pages in Jekyll and GitHub Pages?

下一篇: domain doesn't redirect to sub