Over the last week, I moved this blog from a LAMP (Linux, Apache, MySQL, PHP) stack to LEMP (Linux, Nginx, MySQL, PHP) stack. Have a blog post in the works with all the gory details, but wanted to quick document a quirk in the WordPress + Nginx combination that broke permalinks on this site.
Permalinks are user friendly permanent static URLs for a blog post. So for example this particular blog post’ URL is
This works by default in Apache because WordPress puts in the required rewrite rules.
To get it work in Nginx, you have to add the following config in the Nginx site configuration
Under the / location context, add the following
try_files $uri $uri/ /index.php?$args;
This is essentially telling Nginx to try to display the URI as is, and if it fails that, pass the URI as an argument to index.php.