ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Проблема с 404 и fastcgi



On Fri, 26 Aug 2005, Igor Sysoev wrote:

On Fri, 26 Aug 2005, Andrei Nigmatulin wrote:

Есть вот такая конфигурация:

   fastcgi_index index.phtml;
   fastcgi_redirect_errors on;

   server {
       listen  80;

       location / {
           root   html;
           index  index.html index.htm;
       }

       # serve php scripts
       location ~ (/$|\.phtml$|\.php$) {
           fastcgi_param   DOCUMENT_ROOT     $document_root;
fastcgi_param PATH_TRANSLATED $document_root/$fastcgi_script_name;
           fastcgi_param   SCRIPT_NAME       $fastcgi_script_name;
           fastcgi_param   QUERY_STRING      $query_string;
           fastcgi_param   SERVER_NAME       $server_name;
           fastcgi_param   REQUEST_URI       $request_uri;
           fastcgi_param   DOCUMENT_URI      $document_uri;
           fastcgi_param   REQUEST_METHOD    $request_method;
           fastcgi_pass 127.0.0.1:8002;
       }

       error_page 404 =200 /404.phtml ;
   }

Как видно, все запросы, которые заканчиваются на "/" обрабатываются через 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




 




Copyright © Lexa Software, 1996-2009.