Finally using nginx's "try_files" directive
OLD:
error_page 404 = /wordpress/index.php?q=$request_uri;
or:
if (!-e $request_filename) { rewrite ^/(.*) /wordpress/index.php?uri=$request_uri last; }
NEW:
try_files $uri $uri/ /wordpress/index.php?q=$uri&$args;
Why make life more complicated if you don't need to?
Also thanks to Igor's patch you can have multiple of these, i.e.:
location /wordpress { try_files $uri $uri/ /wordpress/index.php?q=$uri&$args; } location /anotherapp { try_files $uri $uri/ /anotherapp/controllerfile.php?q=$uri&$args; }
etc.
This is good, as Drupal, WordPress and many other packages (including anything I develop anymore) use the Front Controller pattern of development, which makes deploying applications a lot simpler and helps support a consistent framework across the entire application.
NOTE: Updated on 1/5/10 to include the $args 🙂