Обработка 404 ошибки.

Николай

PHP - CooL
Обработка 404 ошибки.

Прочитал статейку: http://detail.phpclub.net/article/2001-01-16. Все сделанно на основе этой статьи, накакой самодеятельности, но почему-то браузеру отдается 404 ошибка...
Страницы http://www.shmakov.net/search/stat/ на моем на самом деле не существует.
Есть файл .htaccess, его содержимое:
ErrorDocument 404 /err.php

Содержимое файла err.php:
PHP:
$url=$_SERVER['REQUEST_URI'];
if(ereg("^/search/stat/$", $url)){
    header ("HTTP/1.0 200 Ok");
    include "..."; //Вместо точек конечно же название файла...
    exit();
}
Header("HTTP/1.0 404 Not Found");
exit();
По идее все правильно, даже браузер показывает содержимое этой страницы, но через Header браузеру все равно передается 404 ошибка, я это вот так проверил:
PHP:
$url="www.shmakov.net";
$GET="/search/stat/";
$fp = fsockopen ($url, 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br>\n";
} else {
    fputs ($fp, "GET ".$GET." HTTP/1.0\r\nHost: ".$url."\r\n\r\n");
    echo fgets($fp,128)."<br>";
    fclose ($fp);
}
Помогите плз разобраться, почему браузеру не отдается 200 ok?
 

Николай

PHP - CooL
а почему у тя 2 header()'а? запихни 2-ой хотя бы в else:
На самом деле это не имеет значения!

какой страницы?
з.ы. в IE 5.0 пахать не будет в принципе
Просто охринеть... А я и в Опере тестил и в Мазиле тестил, они нормально показывают, а какой-то 5 IE не может показать...

Ну тогда хоть кто-нибудь мне может подсказать верный алгоритм решения моей проблемы?
 

Фанат

oncle terrible
Команда форума
Как я вижу, у тебя, похоже, CGI версия.
может быть, из-за этого?
 

fixxxer

К.О.
Партнер клуба
Для CGI - заголовок не перепишется. Попробуй слать header("Status: 200 OK") или как там его (поищи по header status).

Еще вариант - mod_rewrite. (FilesMatch не предлагаю - оно, вроде бы, с CGI тоже не работает).
 

ys

отодвинутый новичок
Погодите. Обьясните ньюанс:

есть:
ErrorDocument 404 /err.php

разве можно при помощи
header ("HTTP/1.0 200 Ok");

переопределить ответ:
"HTTP/1.0 404 Not Found"
 

ys

отодвинутый новичок
fixxxer

Спасибо. Я то думал апачь мне не даст...
 

korvin0

моська
fixxxer
ты точно уверен в сказанном? у меня php модулем, но заголовок в примере, данном Николаем, не переписывается, и приходит 404, а не 200.
 

fixxxer

К.О.
Партнер клуба
Я точно уверен в том, что это так работает на моей конфигурации. ;)

.htaccess
ErrorDocument 404 /404.php

404.php
<?
header("HTTP/1.0 200 OK");
echo "test";
?>

>telnet localhost 80
GET /no.such.address HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 26 Sep 2004 19:22:18 GMT
Server: Apache/1.3.31 (Win32) PHP/5.0.0-dev
X-Powered-By: PHP/5.0.0-dev
Connection: close
Content-Type: text/html; charset=windows-1251

test

Connection to host lost.
 

Николай

PHP - CooL
не обращай внимания на него просто
Я то и не обращаю внимания, но вот поисковики не индексируют эти страницы...

Да, на самом деле проблема в моем корявом хостинге! Попробовал тот же самый скрипт на Валуехост, все отлично сработало!

Короче решил все переделать с помощью mod_rewrite, насколько я понимаю, это ещё и быстрей будет?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Николай
Короче решил все переделать с помощью mod_rewrite, насколько я понимаю, это ещё и быстрей будет?
Все методы кроме mod_rewrite (который и был создан специально для таких случаев) имеют изрядное количество неочевидных с первого взгляда проблем.

Так что да, надо юзать mod_rewrite. А быстрее или нет --- вопрос несущественный.
 
Сверху