Двойной try_files для решения проблемы nginx "Не указан входной файл"

Я следую за вики nginx ( http://wiki.nginx.org/WordPress), чтобы настроить мой wordpress

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

Используя приведенные выше строки, когда статический файл, который не найден, он будет перенаправлен на index.php WordPress, это нормально, но..

Проблема: Когда я запрашиваю php-скрипт небытия, например, http://www.example.com/foo.php, nginx выдаст мне

No input file specified

Я хочу, чтобы nginx возвращал 404 вместо вышеуказанного сообщения, поэтому в основной конфигурации fcgi я добавляю 2-е try_files

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

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

И это сработало, но я смотрю, есть ли лучший способ справиться с этим?

2 ответа

Решение

Нет, это нормальный способ справиться с этим.

Использование try_files в вашем расположении PHP работает только при условии, что сервер с этим конкретным экземпляром nginx также имеет код PHP. Это, конечно, не всегда так, и поэтому не всегда будет работать.

То, что вы можете сделать, это использовать fastcgi_intercept_errors, чтобы nginx перехватывал ошибки из вашего бэкэнда PHP, а затем обрабатывал их с помощью своего собственного обработчика ошибок error_page. Это позволяет вам использовать собственный обработчик, определенный в nginx.

Другие вопросы по тегам