此解决方案允许您通过 .htaccess 使用真正的 HTTP 重定向 - 但是,涉及 .htaccess 的任何内容都不会在 GitHub 页面上运行,因为它们不使用 Apache。
截至 2014 年 5 月, GitHub Pages 支持重定向,但根据jekyll-redirect-from Gem 文档,它们仍然基于HTTP-REFRESH(使用<meta>
标签),这需要完整的页面加载才能发生重定向。
我不喜欢这种<meta>
方法,所以我为任何希望使用 Apache 在 .htaccess 文件中提供真正的 HTTP 301 重定向的人提供了一个解决方案,该文件为预先生成的 Jekyll 站点提供服务:
首先,.htaccess
在include
属性中添加_config.yml
include: [.htaccess]
接下来,创建一个 .htaccess 文件并确保包含YAML front matter。这些破折号很重要,因为现在 Jekyll 将使用 Jekyll 的模板语言 Liquid 解析文件:
---
---
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]
从那里开始,由您决定_site
使用 Apache 服务。我通常将完整的 Jekyll 存储库克隆到非 webroot 目录中,然后我的虚拟主机是该_site
文件夹的符号链接:
ln -s /path/to/my-blog/_site /var/www/vhosts/my-blog.com
多田!现在 Apache 可以从您的虚拟根目录提供 _site 文件夹,并使用您想要的任何 HTTP 响应代码完成由 .htaccess 提供支持的重定向!
您甚至可以变得超级花哨,并redirect
在每个帖子的前面使用一个属性来指定要在 .htaccess 循环中使用的重定向代码。