Well that was quick. An issue in my NGINX configuration meant that special URIs (like this one at /posts/0x01) were not loading. What happened was that NGINX was expecting either a full folder path (/posts/) with an index.html in the folder or the html file fully qualified (i.e /posts/0x00.html worked but /posts/0x00 did not).

Due to aesthetic reasons, I don’t like .html showing in the URL bar. That meant I had two options. Either everything was going to have its own folder (/posts/0x00/index.html) or I could rewrite the URI to include the .html (/posts/0x00.html). Both ugly choices.

So I looked into NGINX’s try_files function and it turned out it was a simple fix. I just added $uri.html to try. My full location config is:

location / {
    # This is where the magic happens
    try_files $uri $uri/ $uri.html  =404;
}

and now my posts and subpages work perfectly.

Just a cheeky heads up for anyone else running NGINX and Jekyll.