htaccess редирект ErrorDocument 404 не работает - PullRequest
1 голос
/ 05 октября 2011

Скажите, пожалуйста, почему это не работает?Он работал, но по непонятным причинам решил прекратить работать.В php я выдаю 404, если страница не найдена следующим образом.

if(checkPageExists($escaped_url_page_name)){
header('HTTP/1.1: 200 OK');
}else{
header("HTTP/1.0 404 Not Found");
die;
}

Мой htaccess -

php_flag magic_quotes_gpc Off

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

ErrorDocument 404 /404.php

Страница 404 находится в корневом каталоге и имеет имя 404.php.Почему бы это не сработало, когда пять минут назад это было и ничего не изменилось.Я проверил страницу с Fiddler, и он действительно выбрасывает 404, но перенаправление не происходит.У меня реализованы дружественные URL-адреса, но я не думаю, что это влияет на это, так как "/" в htaccess относится к физическому корню сайта, который я думал.Заранее спасибо.

1 Ответ

3 голосов
/ 05 октября 2011

Однажды у меня была похожая проблема - когда PHP выбрасывает заголовок 404, Apache обычно не создает для него страницу 404. (Правка: это, вероятно, связано с тем, выводит ли PHP какой-либо текст. Я не особо экспериментировал с этим.) Если вы проверите заголовки в своем браузере, вы увидите, что заголовок 404 работал, даже если страница пуста .

Я не уверен насчет автоматизированного решения, но я только что сделал функцию http_error($code), которая печатает мою пользовательскую страницу ошибки и вызывала ее вместе с header() всякий раз, когда мой код вручную вызывал 404. Затем я связал немного код ErrorDocument, который вызывает http_error только:

ErrorDocument 404 index.php?http_error=404
ErrorDocument 403 index.php?http_error=403

... и т. Д.

...