Rewriting Wordpress permalinks for Ghost with nginx
I migrated this blog to [Ghost](tryghost.com) some time ago, but I thought it might be useful to someone else to see how I kept my permalinks intact after moving off Wordpress.
Here's the problem: Wordpress used this format for posts `/year/month/post-title.html`
Ghost, out of the box, uses simply `/post-title` which I like.
The [Ghost Wordpress plugin](http://wordpress.org/plugins/ghost/) worked great to do the initial import, and kept most of my fancy formatting. But since [Cool URIs don't change](http://www.w3.org/Provider/Style/URI.html) I still needed some way to make the permalinks work. At the time I couldn't find a way to make Ghost use Wordpress-style permalinks and, honestly, it felt like too much structure for this tiny blog.
Turns out that the Wordpress XML export includes the permalinks for each post, so I wrote some XPath to extract just those elements, something like this:
xpath weblogfred.wordpress.2013-12-07.xml //item/wp:postmeta/wp:meta_value@text
The command-line `xpath` tool's output sucks, so I ended up copying-and-pasting the list of permalinks into Emacs.
This ended up with a list like:
/about
/2009/04/problems-installing-easy_install-python-imaging-library.html
/2009/06/the-unofficial-way-to-uninstall-darwinports-macports.html
...
With the help of a little Emacs macro magic, I rewrote the list to:
rewrite ^/about$ /about permanent;
rewrite ^/2009/06/the-unofficial-way-to-uninstall-darwinports-macports.html$ /the-unofficial-way-to-uninstall-darwinports-macports permanent;
...
I then saved those in `/etc/nginx/permalinks.conf` and then added `include permalinks.conf;` in the correct `server` block in my nginx config.
All in all, this worked pretty well, but was way more complicated than I'd like. At least it was a one time deal, and was right at the threshold of "number of things that I'll deal with manually" which works out to be about 30 items.
Here's the final result:
https://gist.github.com/phred/6dda1fd3f60eb0e5df6d
published: 2014-08-05
topics: