Nginx try_files不会触发index.php的响应

Chr*_*aan 1 php wordpress robots.txt nginx sitemap.xml

我遇到问题,try_files似乎没有将不存在的文件的请求传递给最后指定的值,在我的例子中是index.php.我正在使用Wordpress和我使用的XML Sitemap生成器插件创建虚拟XML文件和由Wordpress处理的虚拟robots.txt.不幸的是,try_files似乎没有将这些文件的请求传递给Wordpress.

这是我的服务器配置:

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;
}
Run Code Online (Sandbox Code Playgroud)

我在这台服务器上运行多个单独的Wordpress站点,所以为了节省时间,我创建了一个文件wp.conf,其中包含Wordpress的所有常用配置元素.这是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;
        }
}
Run Code Online (Sandbox Code Playgroud)

其他一切工作都很完美,但try_files安排似乎没有正确地交付.有任何想法吗?

cob*_*aco 6

您遇到了http://wiki.nginx.org/IfIsEvil#Examples中描述的问题之一

ifs您指定wp.conf的uneeded你已经涵盖其中有你的try_files,所以你可以删除它们,得到以下特性:

location / {try_files $uri $uri/ /index.php$is_args$args;}
Run Code Online (Sandbox Code Playgroud)

那会:

  1. 检查是否存在与$ uri匹配的文件(相对于root指令指定的位置)
  2. 如果不检查是否存在目录匹配
  3. 否则重定向到 /index.php$is_args$args

$is_args计算结果?$args设置.