Rewrite WordPress and ZenPhoto for Nginx


Nginx also supports URL rewrite, not compatible to Apache’s mod_rewrite, but more intuitive and more powerful imho. The only problem is most applications, WordPress and ZenPhoto for this specific case do include the mod_rewrite 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.