该解决方案允许您通过.htaccess使用真正的HTTP重定向-但是,涉及.htaccess的内容在GitHub页面上均不起作用,因为它们不使用Apache。
截至2014年5月,GitHub Pages支持重定向,但根据jekyll-redirect-from Gem文档,它们仍基于HTTP-REFRESH(使用<meta>
标签),这需要完整的页面加载才能进行重定向。
我不喜欢这种<meta>
方法,所以我为想要使用Apache的.htaccess文件中提供真实HTTP 301重定向的人提供了一个解决方案,该Apache服务于预先生成的Jekyll网站:
首先,添加.htaccess
到include
物业_config.yml
include: [.htaccess]
接下来,创建一个.htaccess文件,并确保包含YAML前题。这些破折号很重要,因为现在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文件夹,并带有.htaccess支持的重定向,该重定向使用您想要的任何HTTP响应代码!
您甚至可能会非常喜欢,并redirect
在每个帖子的开头问题中使用属性来指定要在您的.htaccess循环中使用的重定向代码。