I’m having a problem with try_files not appearing to pass off requests for non-existent files to the last specified value, in my case index.php. I’m using WordPress and the XML Sitemap generator plugin I use creates virtual XML files and a virtual robots.txt that’s handled by WordPress. Unfortunately try_files doesn’t seem to be passing the requests for these files to WordPress.
Here’s my server configuration:
server {
## Web domain
server_name christiaanconover.com;
## Site root
root /var/www/christiaanconover.com;
## Index
index index.php index.htm;
## Common WordPress configuration
include wp.conf;
## Include PHP configuration
include php.conf;
## Gzip Compression
include gzip.conf;
## Include W3TC configuration
include /var/www/w3tc/christiaanconover.com;
}
I run multiple separate WordPress sites on this server, so to save time I created a file wp.conf that contains all the commonly used configuration elements for WordPress. Here is the contents of wp.conf:
location / {
## Prevent PHP files from being served as static assets, and fall back to index.php if file does not exist
try_files $uri $uri/ /index.php?$args;
## If a file exists, serve it directly
if (-f $request_filename) {
break;
}
## WordPress Rewrite
if (!-e $request_filename) {
rewrite ^ /index.php last;
}
}
Everything else is working perfectly, but the try_files arrangement just doesn’t seem to hand off properly. Any ideas?
you’re running into one of the problems described at http://wiki.nginx.org/IfIsEvil#Examples
the
ifs
you specified in thewp.conf
are uneeded you already have them covered with yourtry_files
, so you can just remove them, yielding:that will:
/index.php$is_args$args
Where
$is_args
evaluates to?
when$args
is set.