nginx rewrite rules for html extensions

I Just swtiched to jekyll running in nginx. It’s simple and lightning fast.

jekyll makes all output files .html however I wanted these files to be available to people without the explicit need to have .html in the url.

I found the following rewrite rule to solve exactly that.

location / {
  # break if URI has .html extension
  if ($request_filename ~* ^.+.html$) {
    break;
  }
  # add .html to URI and serve file, directory, or symlink if it exists
  if (-e $request_filename.html) {
    rewrite ^/(.*)$ /$1.html last;
    break;
  }
}