Rewrite WordPress and ZenPhoto for Nginx


Nginx also supports URL rewrite, not compatible to Apache’s modrewrite, but more intuitive and more powerful imho. The only problem is most applications, WordPress and ZenPhoto for this specific case do include the modrewrite code snippet and/or may update the .htaccess for your convenience.

Thanks to the Slicehost community, the port of mod_rewrite rules perfectly covers WordPress and SuperCache. Here are some minor modification to craft for more general usage:

# the blog dir, aka where index.php is
set $blog_dir '';
# the wordpress dir where all wp-* stays
set $wordpress_dir '/wordpress';
include wordpress.rewrite;

In nginx.conf, define wordpress_dir and blog_dir, these two variables are equivalent to WordPress address (URL) and Blog address (URL) stripped off the host information. Then we can replace the hard-coded /blog path by using $wordpress_dir or $blog_dir:

< set $supercache_file /blog/wp-content/cache/supercache/$http_host/$1index.html;
>     set $supercache_file $wordpress_dir/wp-content/cache/supercache/$http_host/$1index.html;
< rewrite . /blog/index.php last;
>     rewrite ^(.*)$ $blog_dir/index.php?q=$1 last;

Here is my zenphoto.rewrite, it seems sivel’s more concise. Either of these should work.