Как видно, все запросы, которые заканчиваются на "/" обрабатываются через
fastcgi (/index.phtml).
1) при запросе /non-existent отрабатывает скрипт 404.phtml.
2) при запросе /non-existent/ вижу сообщение "No input file specified".
Хочется чтобы эти запросы тоже обрабатывались скриптом /404.phtml. Как это
можно сделать ?
По идее, должны. Можно прислать мне отлаочный лог запроса /non-existent/ ?
Судя по логу, дело вот в чём. Значение переменной $fastcgi_script_name
кэшируется после первого определения. Для запроса "/non-existent/"
$fastcgi_script_name равна /non-existent/index.phtml. На этот запрос
fastcgi возвращает 404. error_page перехватывает ошибку и делает опять
запрос к fastcgi. Но так как $fastcgi_script_name закэшировано, то
PATH_TRANSLATED опять будет равен .../non-existent/index.phtml и
fastcgi опять возврашает ошибку 404. Она уже не перенаправляется
на error_page, а отдаётся, как есть.
Чтобы избежать такой ситуации, нужно описать отдельный location для
/404.phtml и указать там
fastcgi_param PATH_TRANSLATED $document_root/404.phtml;
или
fastcgi_param PATH_TRANSLATED /path/to/fastcgi/404.phtml;
Игорь Сысоев
http://sysoev.ru