The problem#
I changed the URI scheme of this blog recently from
/posts/YYYY/MM/slug/
to /YYYY/MM/DD/slug/
. The
latter looks better and makes the actual day of the post more visible.
But I already had posts using the old scheme and
cool URIs don't change. Luckily, someone wrote a Pelican
plugin called pelican-alias which allows articles to be
tagged with additional URIs to redirect to their canonical location. All I
had to do was add an Alias: /posts/2015/02/...
line to the top of each
of the posts I had already written and the plugin would take care of the
rest.
Automating the aliasing#
The non-trivial part of automating this is that the URIs include the article's slug, which may have been generated by Pelican from the title, so Pelican has to be involved in generating the correct redirects.
There are two ways I could have automated this process:
- Modify the plugin to add a redirect from the old scheme to the new scheme for every article. Unless somehow controlled, this would result in creating redirects for new articles which do not need them.
- Write a one-off script to get the slugs out of Pelican and write the
Alias:
lines into the blog posts.
I took the latter approach because it was simpler and involved no new code to maintain.