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

Redirect 在Jekyll和GitHub页面中,重定向旧页面的最佳方法是什么?,redirect,github,jekyll,http-status-code-301,github-pages,Redirect,Github,Jekyll,Http Status Code 301,Github Pages,我在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爬虫程序不会将其识别为重

我在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爬虫程序不会将其识别为重定向。

由于github不允许301重定向(这并不奇怪),您必须在移动到新的URL结构(并点击搜索引擎)或保持URL不变之间做出决定。我建议你先走一步。让搜索引擎的芯片落在可能的地方。如果有人通过搜索引擎点击你的一个旧链接,他们将被重定向到新位置。随着时间的推移,搜索引擎将获取您的更改

你可以做的一件事是创建一个只列出你的新页面而不是旧页面的列表。这将加快用新URL替换旧URL的速度。此外,如果您的所有旧URL都在“/programovani”目录中,您还可以使用一个来告诉将来的爬网他们应该忽略该目录。例如:

User-agent: *
Disallow: /programovani/

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

最好的选择是通过将_config.yml中的permalink格式设置为与您的旧博客匹配,从而完全避免url更改

除此之外,最完整的解决方案是生成重定向页面,但这并不一定值得。最后,我简单地让我的404页面更加友好,使用javascript猜测正确的新url。它对搜索没有任何作用,但实际用户可以访问他们正在查找的页面,并且在代码的其余部分中没有可支持的遗留内容

你试过这个吗

您将别名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月,但根据数据,它们仍然基于(使用
标记),这需要在发生重定向之前加载完整的页面

我不喜欢
方法,因此我为任何希望使用Apache在.htaccess文件中提供真正HTTP 301重定向的人提供了一个解决方案,该文件提供了一个预生成的Jekyll站点:


首先,将
.htaccess
添加到
\u config.yml

include: [.htaccess]
接下来,创建一个.htaccess文件并确保包含。这些破折号很重要,因为现在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进入
\u站点
目录

RewriteRule ^blog/my/old/path.php /my-new-path/ [R=301,L]
从那以后,您就可以使用Apache为
\u站点
提供服务了。我通常将完整的Jekyll repo克隆到非webroot目录中,然后我的vhost是指向
\u站点
文件夹的符号链接:

ln -s /path/to/my-blog/_site /var/www/vhosts/my-blog.com
塔达!现在,Apache可以从您的虚拟根目录中为_site文件夹提供服务,并提供使用您想要的HTTP响应代码的.htaccess驱动的重定向


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

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

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


杰基尔在过去几个月里经历了一些重大更新,所以当这个问题最初发布时,这可能是不可能的

Jekyll在您的博客文章中支持
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

最好的解决方案是同时使用从插件重定向

GitHub支持它,使它变得简单:

_config.yml

gems:
  - jekyll-redirect-from
a、 医学博士

如下文所述:

现在:

将重定向到
example.com

只要页面定义了
重定向到
,插件就会接管

在GitHub页面v64上测试

注意:此版本有一个最近修复的严重错误,错误地重用了重定向的默认布局:

手动布局方法

如果您不想使用它,您可以自己轻松实现:

a、 医学博士

\u layouts/redirect.html
基于:


SE不是困扰我的东西。我通过其他网站/论坛的链接获得404。我制作了零刷新时间的假页面,这将“重定向”用户。我确实在网站管理员工具中测试过它,看来crawler对此也很满意。但我不是;)如果你仍然有404错误的问题,给我一个链接到其中一个,我会看一看,看看我是否能告诉你发生了什么。现在我通过假页面解决了这个问题。前404中的一个是。我通过这个生成它们。这个脚本很糟糕,但它做了Github页面没有使用的事情plugins@tekknolagi也许是的
gems:
  - jekyll-redirect-from
---
permalink: /a
redirect_to: 'http://example.com'
---
firefox localhost:4000/a
---
layout: 'redirect'
permalink: /a
redir_to: 'http://example.com'
sitemap: false
---
<!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>
curl localhost:4000/a