在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.yml
的include
属性
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循环中使用哪个重定向代码。
上一篇: What is the best approach for redirection of old pages in Jekyll and GitHub Pages?