使用`rack-rewrite`从固定链接中删除月份和日期

时间:2012-07-11 09:12:00

标签: regex rack jekyll octopress

我已开始将博客移至Octopress,但不幸的是,Jekyll的限制并不允许我使用缩写的月份名称作为永久链接。因此,我希望完全摆脱位。

我已经在this article中读到您可以使用rack-rewrite来处理重定向,因为我正在使用Heroku来托管它。

那我怎么转:

这:example.com/journal/2012/jan/03/post-of-the-day/
进入:example.com/journal/2012/post-of-the-day/


额外积分:如果我有另一条将/blog/重定向到/journal/的规则,该规则是否仍会遵守上述规则?所以来自:

这:example.com/blog/2012/jan/03/post-of-the-day/
对此:example.com/journal/2012/jan/03/post-of-the-day/
最后:example.com/journal/2012/post-of-the-day/

感谢您提前协助。 :)

2 个答案:

答案 0 :(得分:2)

我的第一个想法是抓住斜线之间的每个块然后只显示你想要的那些。

所以这样的事情会起作用:

// given example.com/blog/2012/jan/03/post-of-the-day/

r301 %r{\/blog\/(.*)\/(.*)\/(.*)\/(.*)\/$}, '/journal/$1/$4/'

以下是Rubular的链接,以显示我的意思http://rubular.com/r/La6rjrE5Hw

答案 1 :(得分:1)

您希望尽可能具体,因此您不会意外地重写在遇到新网址结构时会失败的其他内容。另请注意,我不知道机架重写,所以我在这一点上遵循redroot89的领先优势。

r301 %r{^\/(:blog|journal)\/([0-9]{4})\/[a-z]{3}\/[0-9]{2}\/(.*)\/$}, '/journal/$1/$2/

这只捕获了年份和slug,但通过更具体的模式找到了其余部分。通过包含(:blog|journal),您可以一次性重定向,而无需将两个重定向链接在一起。