双重try_files解决nginx“未指定输入文件”问题

双重try_files解决nginx“未指定输入文件”问题

我正在关注 nginx 的 wiki(http://wiki.nginx.org/WordPress)设置我的 WordPress

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

通过使用上述行,当找不到静态文件时,它将重定向到index.phpwordpress,这是可以的,但是......

问题:当我请求不存在的 php 脚本时,例如http://www.example.com/foo.php,nginx 将给我

No input file specified

我希望 nginx 返回 404 而不是上面的消息,因此主 fcgi 配置,我添加第二个try_files

location ~ \.php$ {
    try_files  $uri =404;

    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include /etc/nginx/fastcgi_params;
    ...
}

这有效,但我在寻找是否有更好的方法来处理它?

答案1

不,这是正常的处理方式。

答案2

在您的 PHP 位置中使用 try_files 仅当具有该特定 nginx 实例的服务器也具有 PHP 代码时才有效。当然情况并非总是如此,因此并非总是有效。

你可以做的是使用fastcgi_intercept_errors让 nginx 拦截来自 PHP 后端的错误,然后使用其自己的 error_page 错误处理程序处理这些错误。这允许您在 nginx 中定义自定义处理程序。

相关内容