Назад | Перейти на главную страницу

Двойные 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, Добавляю второй try_files

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

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

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

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

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

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