2

我遇到了一个问题,try_files 似乎没有将对不存在的文件的请求传递给最后一个指定的值,在我的例子中是 index.php。我正在使用 Wordpress 和我使用的 XML 站点地图生成器插件创建虚拟 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;
}

我在此服务器上运行多个单独的 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;
        }
}

其他一切都运行良好,但 try_files 安排似乎并没有正确移交。有任何想法吗?

4

1 回答 1

7

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

您在ifs中指定的wp.conf不需要您已经将它们覆盖在您的try_files中,因此您可以删除它们,从而产生:

location / {try_files $uri $uri/ /index.php$is_args$args;}

这将:

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

Where$is_args评估到?when$args被设置。

于 2012-10-10T20:08:52.127 回答