ErrorDocument 404 с mod_rewrite

unlex

Новичок
ErrorDocument 404 с mod_rewrite

Похожая тема уже поднималась на форуме, но ответа я так и не нашел.
Суть в следующем. Необходимо создать свою страницу ошибок.

Включен мод реврайт, так что все запросы проходят через index.php. Там контроллер их разбирает и если находит несуществующий параметр выдаёт

PHP:
header("HTTP/1.0 404 Not Found");exit;
В .htaccess прописано ErrorDocument 404 /404.html
В корне лежит 404.html.

Так вот при вводе к примеру /myhost/bhjsbjwb выдает просто чистую страницу, хотя заголовки уходят корректные

HTTP/1.x 404 Not Found
Date: Tue, 24 Feb 2009 14:03:24 GMT
Server: Apache/2.2.10 (Win32) PHP/5.2.6
X-Powered-By: PHP/5.2.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8

Если отключить mod_rewrite то все нормально - происходит выдача содержимого 404.html.

Привожу содержимое .htaccess

PHP:
ErrorDocument 404 /404.html
  RewriteEngine on 
  Options +FollowSymlinks
  RewriteCond %{REQUEST_FILENAME} !-f 
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php [QSA]
Чувствую, что делаю что-то не так. Подскажите что )
 

dimagolov

Новичок
unlex, пойми, что отдавая
PHP:
header("HTTP/1.0 404 Not Found");exit;
ты отдаешь клиенту ТОЛЬКО заголовок. apache со своим ErrorDocument отрабатывать ничего не будет, он УЖЕ отработал и вызвал index.php.

вот так ты сам отдашь 404 страницу по ошибке из своего index.php:
PHP:
header("HTTP/1.0 404 Not Found");include($_SERVER['DOCUMENT_ROOT'].'/404.html');exit;
 
Сверху