How to change pages’ URLs in Jekyll using a custom generator plugin.
We had some content in current directory and some in
/content folder which was essentially another git repository. The problem was that the
/content folder stayed in the path which wasn’t what we wanted (and changing document root was not possible).
So we implemented a simple generator plugin changing all urls starting with /content/. To do so, we had to make an attribute writer for
url param of
Jekyll::Page class since this isn’t otherwise possible. That’s how our simple generator looks like:
$ cat _plugins/permalinks.rb module Jekyll class Page def url=(name) @url = name end end end module Permalinks class Generator < Jekyll::Generator def generate(site) site.pages.each do |page| if page.url.start_with? '/content/' page.url = page.url[8..-1] end end end end end
Another way is to just edit
_config.yml file and change the
permalink attribute, but than you need a special entry for every subdirectory.
← IT'S OUT NOW
I wrote a complete guide on web application deployment. Ruby with Puma, Python with Gunicorn, NGINX, PostgreSQL, Redis, networking, processes, systemd, backups, and all your usual suspects.