nginx:try_files 未找到静态文件,因此返回 PHP

nginx:try_files 未找到静态文件,因此返回 PHP

相关配置:

location /myapp {
    root /home/me/myapp/www;
    try_files $uri $uri/ /myapp/index.php?url=$uri&$args;

    location ~ \.php {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include       /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    }
}

我确实有一个文件foo.html/home/me/myapp/www但是当我浏览/myapp/foo.html它时,它由 PHP 处理,try_files列表中的最终后备。

为什么会发生这种情况?

答案1

如果您浏览到/myapp/foo.html,Nginx 会检查 处的文件/home/me/myapp/www/myapp/foo.html。如果未找到该文件,则会继续查找try_files列表中的后备文件。

如果您需要 Nginx 检查 处的文件/home/me/myapp/www/foo.html,则您需要根据用例使用alias而不是。以下是解决方案...root

location /myapp {
    alias /home/me/myapp/www;
    try_files $uri $uri/ /myapp/index.php?url=$uri&$args;

    location ~ \.php {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include       /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    }
}

请注意长期存在的错误和不能一起使用。另外,请注意使用可能会破坏配置的其他alias部分,例如 PHP 处理!try_filesalias

相关内容