header("HTTP/1.0 404 Not Found");возвращается ответ с статусом 200 вместо 404, хотя статусов 301 и 302 это не касается ...
кто же режет 404 СТАТУС?! nginx? php-fpm? or php?
#cat /1.php <?php header("HTTP/1.0 404 Not Found"); ?> #curl -i test.local/1.php HTTP/1.1 200 OK Server: nginx/1.0.6 Date: Thu, 22 Sep 2011 10:01:13 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: close X-Powered-By: PHP/5.3.6
Дано: nginx/1.0.6, PHP 5.3.6
Решение: Добавление дополнительных строк к описанию хоста:
location ~ \.php$ { ... fastcgi_pass_header Status; ... }к положительным результатам не привели, как оказалось в php есть фича:
; cgi.rfc2616_headers configuration option tells PHP what type of headers to ; use when sending HTTP response code. If it's set 0 PHP sends Status: header that ; is supported by Apache. When this option is set to 1 PHP will send ; RFC2616 compliant header. ; Default is zero. ; http://php.net/cgi.rfc2616-headers cgi.rfc2616_headers = 0при включенном cgi.rfc2616_headers (cgi.rfc2616_headers=1), действие вида:
header("HTTP/1.0 404 Not Found");задает не валидный заголовок, в связи с этим заголовок nginx'у передается пустым, а nginx уже, при пустом заголовке дописывает его как заголовок со статусом 200... вот и грабли ....
Примечание: в большинстве случаев данный параметр выключен изначально ... но это не мой случай =)
Комментариев нет:
Отправить комментарий