NGINX rewriting rule for getting clean URL
In summary, you need to let NGINX know that if that file doesn't exist, to not throw a 404 error, but rather call index.php
. Wordpress is smart enough to parse the URL as parameters, and serve the correct page.
Add this snippet in your server configuration block:
location / { try_files $uri $uri/ /index.php?$args;}
Here is a complete example from nginx.org:
# Upstream to abstract backend connection(s) for phpupstream php { server unix:/tmp/php-cgi.socket; server 127.0.0.1:9000;}server { ## Your website name goes here. server_name domain.tld; ## Your only path reference. root /var/www/wordpress; ## This should be in your http block and if it is, it's not needed here. index index.php; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location / { # This is cool because no php is touched for static content. # include the "?$args" part so non-default permalinks doesn't break when using query string try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini include fastcgi.conf; fastcgi_intercept_errors on; fastcgi_pass php; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; }}