Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: nginx->fast-cgi->php->bitrix -- как ве	рнуть 404 из php , с ЧПУ тоже 	на 404
 
 
On Sat, Feb 12, 2011 at 11:26:08PM +0200, Roman wrote:
> Здравствуйте, Nginx-ru.
> 
> nginx/0.8.54
> php 5.3.5 FPM/FastCGI
> 
> Друзья, никак немогу понять как передавать из скрипта php статус 404,
> при ЧПУ сделаном тоже на 404.
> 
> 
> 
> 
> Сайт работает на Битрикс.
> 
> ЧПУ сделано через /404.php
> 
> URL бывают
> - прямой вызов скрипта php              (/path/script.php)
> - c ЧПУ, редирект на реальный скрипт
> - если заканчивается на /path/          - вызов /path/index.php
> 
> с приведенным конфигом все работает нормально,
> кроме ситуации, когда URL с ЧПУ указывает на
> несуществующий путь, о чем известно только со стороны php
> 
> например:
> url  /news/102
> рерайтится в /news.php?id=102
> 
> и эта статья удалена. Без fast-cgi все работало - правильно.
> открывался /404.php и возвращался HTTP request status: 404
> а сейчас - открывался /404.php  но статус - всегда 200
> 
> 
> Да, в php:
> cgi.rfc2616_headers = 1;
> cgi.nph = 0;
> 
> 
> 
> конфиг:
> 
>         location / {
> 
> 
>                 index   index.php;
> 
>                 error_page      404 = @bitrix;
>                 error_page      502 /502.htm;
> 
> 
> 
>                 fastcgi_pass    unix:/tmp/php-fpm.sock;
>                 fastcgi_index   index.php;
>                 fastcgi_param  SCRIPT_FILENAME 
> $document_root$fastcgi_script_name;
>                 include fastcgi_params;
>                 fastcgi_intercept_errors on;
Убрать fastcgi_intercept_errors.
>                 #recursive_error_pages          on;
>                 #fastcgi_pass_header    Status;
>                 break;
>         }
> 
> 
> 
>         location @bitrix {
> 
>                 fastcgi_pass   unix:/tmp/php-fpm.sock;
> 
>                 fastcgi_index  index.php;
> 
>                 fastcgi_param  SCRIPT_FILENAME $document_root/404.php;
> 
>                 include fastcgi_params;
> 
>                 fastcgi_intercept_errors off;
> 
>                 fastcgi_pass_header     Status;
>                 #recursive_error_pages  on;
> 
>                 break;
> 
>         }
break не нужен. Совсем.
Вообще же, если конфигурация именно такая простая, то достаточно только
         location / {
                 index   index.php;
                 error_page      502 504 /502.htm;
                 fastcgi_pass    unix:/tmp/php-fpm.sock;
                 fastcgi_index   index.php;
                 fastcgi_param  SCRIPT_FILENAME 
$document_root$fastcgi_script_name;
                 include fastcgi_params;
         }
         location = /502.htm {
                ...
         }
-- 
Igor Sysoev
http://sysoev.ru/en/
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
 
 |