Двойной 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.