Не работает header 404 на PHP

123
S
На сайте с 18.09.2011
Offline
20
#11

Приведите, что выводит var_dump.

bool(true)

---------- Добавлено 14.09.2013 в 16:57 ----------

rerighter:
Была у меня такая проблема.
На одном хостинге работало, на другом нет. Сайт - мой самопис. Передаю заголовки:

header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');


Ошибка была точно такая же, как и у Вас.
Убрал:

header('Status: 404 Not Found');

Все заработало. Не было времени разбираться, в чем собственно была проблема этого заголовка. Посмотрите, как формируется 404 у Вас.

Пробовал по-всякому уже:

и вот так

header("Cache-Control: no-cache, no-store");

header("Content-Type: text/html; charset=utf-8");

header($_SERVER['SERVER_PROTOCOL']." 404 Not Found"); //include("error404.php");

exit();

и вот так

header("HTTP/1.1 404 Not Found");

header("HTTP/1.0 404 Not Found");

header("Status: 404 Not Found");

exit();

die();

O
На сайте с 29.05.2008
Offline
195
#12

Sinsir, заголовки уже были отправлены. Скорее всего, выключен вывод WARNING. 0. Включите показ всех ошибок, для этого поместите в самое начало индексного файла следующий код.

error_reporting(2047);

1. Вы используете кодировку UTF-8. Возможно, это связано с тем, что файлы шаблона / HTML закодированы с помощью UTF BOM. Попробуйте перекодировать файлы шаблона в UTF без BOM либо 2. включите буферизацию вывода (ob_start()). 3. Попробуйте поиск функцию принудительной отправки заголовков через поиск в блокноте.

Если ничего не помогло, поместите следующий код в начало индексного файла.


header("X-Status: test");

rerighter, заголовки вообще не передаются, потому что отправлены раньше. Status писать не нужно.

S
На сайте с 18.09.2011
Offline
20
#13

ortegas

Все попробовал - ничего не дало 😕

На странице выводится только bool(true)

В коде страницы видно несколько пробелов перед этой надписью. Может как-то с этим связано?

E
На сайте с 21.09.2009
Offline
283
#14

Sinsir, посмотрите файл .htaccess возможно в нем, правило, вместо показа при ошибке страницы 404, тупо редирект 301 на какую-то другую.

O
На сайте с 29.05.2008
Offline
195
#15

easywind, какой htaccess? Заголовки отправлены до изменения статус кода, следовательно, 404 вообще не применяется.

Sinsir, не все, либо все что вы сумели. Обратитесь к специалисту $. Смысл давать советы, если вы их не выполняете.

S
На сайте с 18.09.2011
Offline
20
#16

Пробовал вообще удалять htaccess ничего в этом плане не изменилось.

Все-таки где-то раньше выводится. Перед проверкой на несуществующую страницу подключается файл с функциями. Возможно что там какая-то функция меняет заголовок, но конкретно слова header в нем нету

---------- Добавлено 14.09.2013 в 18:08 ----------

ortegas,

Выполнил все, кроме функции ob_start(). Я с ней ранее не сталкивался и сейчас читаю мануал по ней чтоб применить

O
На сайте с 29.05.2008
Offline
195
#17

Sinsir, заголовки посылаются перед отдачи клиенту любых данных, которые не являются заголовками. Это может касаться и BOM бита, и пробелов, которые установлены вне контейнера <?php ?>. Если не используется пребуферизация, и до посылки заголовков подключается файл, который закодирован, как UTF-8 с BOM, дальнейшие заголовки посланы не будут.

Warning: Cannot modify header information - headers already sent by (output started at /home/inteline/domains/inteline.com.ua/public_html/config.php:16) in /home/inteline/domains/inteline.com.ua/public_html/error404.php on line 4

Приведите содержание файла config.php.

R
На сайте с 18.12.2009
Offline
92
#18

По поводу конфига. Может Вы там чего не настроили до конца, когда с локалки переносили? Было бы также интересно посмотреть.

S
На сайте с 18.09.2011
Offline
20
#19

В файле конфиг всего 15 строк, где 15 строка это закрывающий тэг php "?>"

Предпоследняя строка подключает базу функций "include_once("func.php");"

Остальное список паролей к базе и настройка соединения с базой.

Все подключаемые файлы преобразовал в utf-8 без BOM

Может я не там вызываю header?

Структура движка такая:

index.php содержит одну строку "include(main.php)"

Далее main.php проверяет в базе наличие даной страницы. если есть - то загружаем данные, если нету - то отсылаем на файл include(error404.php) где и пытаемся вызвать header 404. Но он говорит что header уже был вызван.

O
На сайте с 29.05.2008
Offline
195
#20

Sinsir, значит после ?> есть что-то, что и отправляется до заголовков. Включите показ специальных символов в Notepad++. Возможно это \n, \f или \0.

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий