- Php отдать страницу 404
- Ошибка отправки header 404
- Пример ошибки отправки header 404:
- Вывод ошибки отправки header 404
- Вывод ошибки отправки header 404 на странице
- Для чего отправлять header 404
- Видео — использование header 404
- Друзья!
- Пример отправки header 404
- Проверить попал ли в header 404
- Функция header
- Установление кодировки
- Организация редиректа
- Проблемы вывода
- Как отдавать код ответа 404?
Php отдать страницу 404
Естественно, что отправка 404 на сервер с помощью header должна осуществляться в самом верху страницы.
ВНИМАНИЕ! ЭТО ВАЖНО! В самом верху страницы — это значит, что никакого, символа, ни точки, ни пробела ни переноса — вообще ничего , если у вас есть впереди php код, то код должен быть таким:
здесь может быть сколько угодно кода php // НО! — никакого echo, print_r, var_dump и других выводящих функций!
header(«HTTP/1.0 404 «);
exit ;// используется в том случае, если требуется остановить выполнение ниже идущего кода.
Ошибка отправки header 404
Если вы отправите заголовок header 404, как показано ниже, то вы получите ошибку отправки header 404:
Пример ошибки отправки header 404:
Если перед отправкой заголовка header 404 будет выводящий код, то получите ошибку.
Давайте сделаем ошибку отправки header 404 специально!!
Поместим какой-то текст произвольного содержания, перед отправкой header 404 :
echo ‘Здесь текст, который выводится ранее, чем header 404’;
Посмотрим это на скрине:
Вывод ошибки отправки header 404
Здесь текст, который выводится ранее, чем header 404
Warning: Cannot modify header information — headers already sent by (output started at
путь/page/php/header/001_header_404.html on line 4
Вывод ошибки отправки header 404 на странице
Для чего отправлять header 404
Чтобы не гадать — по какой из причин вам может понадобится использовать отправку заголовка header 404 -приведу собственную причину использования header 404.
На нашем сайте используется единая точка входа, — по всем запросам в адресной строке… будут перенаправляться на ту страницу, на которую настроена переадресация!
И даже те, страницы, которые не существуют… все равно будут перенаправляться… на главную.
Вот как раз для такого случая…
Естественно, что ничего не понятно!
Я делал специальное видео, где использовал приведенный код!
Видео — использование header 404
Друзья!
Пример отправки header 404
Для того, чтобы разобраться в том, как работает отправка заголовка header 404 нам потребуется какая-то страница, которая не существует!
У вас должна открыться такая страница 404 (несколько тем посвятили теме 404)
Но где здесь отправленный header 404 через php!? Этот скрин я вам привел специально — если вы захотите, то сделал отдельный архив -> сложил 404 через php + задний фон второй вариант 404 через php
И теперь, чтобы увидеть, где заголовок надо -> нажимаем ctrl + U
Проверить попал ли в header 404
Как проверить правильно ли был отправлен заголовок с помощью header 404!?
Если у вас возникли проблемы с пониманием того, что происходит заголовками, то существует огромное количество сайтов, которые могут показать всё, что вы отправляете!
Выбрал первый попавший. https://bertal.ru/ — заходим на сайт в вставляем в адресную строку свой адрес страницы.
P.S. Вообще… после случая с санкциями… пошел посмотреть, а что вообще творится со страницами на моем другом сайте и обнаружил, что робот проиндексировал папки(директории) – как отдельные страницы – и описанная тема… как раз востребована была там.
Функция header
HTTP заголовки это специальная информация, которая присоединяется к документу, то есть, к тому файлу, который запрашивается браузером с сервера. Когда мы вбиваем в адресную строку какой-нибудь адрес то, соответственно, запрашиваем на сервере по этому адресу какой-нибудь документ. Эта информация(документ) видна у нас на экране. Но кроме видимой части есть еще и невидимая — те самые HTTP заголовки, которые отправляются сервером браузеру и они нужны для того, чтобы браузер корректно отобразил страницу. То есть, заголовки подсказывают браузеру как показать страницу или как отдать страницу.
Для браузера firefox: кнопка F12 -> сеть -> кликнуть «статус» и обновить страницу :
Среди прочего в заголовках отправляется информация о кодировке страницы, как давно модифицировалась страница, информация о том, что это за страница (html-страница, обычный текстовый документ; или, вместо того чтобы показать страницу, отдать ее на скачивание)
Установление кодировки
Один, из наиболее часто используемых вариантов функции header , это использование функции для установления кодировки.
В файле index.php в папке с нашим уроком запишем: привет, мир! и посмотрим в браузере, что получили. Мы можем получить крабозябры . Это происходит по тому, что браузер будет открывать документ в той кодировке, которую сервер отправил в заголовках по умолчанию. Если кодировка нашего документа не совпадает с кодировкой сервера — получим крабозябры.
Кодировка для всех частей нашего приложения должна быть единой .
Рекомендуется всегда использовать кодировку utf-8 — как универсальную кодировку.
Использование метатэга — не всегда помогает, потому что сервер может отправлять по умолчанию свою кодировку в заголовках и в этом случае она будет иметь больший приоритет, чем метатэг charset .
В этом случае мы должны переопределить кодировку сервера с помощью функции header . (php.net)
Функция header позволяет указать нужную нам кодировку.
header ( ‘Content-Type: text/html; charset=utf-8’ );
?>
где:
text/html — тип документа;
charset=utf-8 — нужная нам кодировка.
Если посмотрим заголовки в «разработка/инструменты разработчика/сеть» (в firefox ), то увидим, что они дополнились кодировкой charset=»UTF-8″ , то есть, мы указали браузеру (отправили заголовки), что нужно использовать именно данную кодировку. При этом она имеет приоритет над метатэгом charset .
Еще один способ установления кодировки по умолчанию — это использовать специальный файл .htaccess . Данный файл является файлом настройки сервера Apache .
Создадим даннный файл в нашей папке.
Установим кодировку для сервера по умолчанию с помощью специальной директивы AddDefaultCharset .
Данная директива заставляет сервер отправлять в заголовках кодировку, указанную в качестве значения данной дериктивы.
Организация редиректа
Функцию header часто используют для редиректа .
Создадим новый файл — inc.php и выведем в нем строку: «привет из подключаемого файла» .
echo ‘Привет из подключаемого файла’ ;
?>
В индексном файле используем функцию header для редиректа. Его можно сделать двумя командами:
— командой ‘ Location ‘
— командой ‘ refresh ‘
header ( ‘Content-Type: text/html; charset=utf-8’ );
header ( ‘Location: inc.php’ ); // где inc.php — относительный путь к файлу
?>
При работе с редиректом нужно помнить что редирект происходит не сразу. Когда отрабатывает
данная команда ( header(‘Location: inc.php’); ), выполнение файла продолжается дальше.
Чтобы сделать безусловный редирект и не выполнять дальнейший код нужно воспользоватся
одной из двух команд — функция die (пер.- умри) и функция exit (пер.- выйти).
Эти команды почти всегда рекомендуется использовать после редиректа.
Чтобы убедиться, что у нас код после команды редиректа выполняется, используем редирект
с задержкой: header(‘refresh: 5, url’) , где
5 — время задержки в секундах,
url=inc.php — адрес, на который должен быть перенаправлен пользователь (если внешний адрес,
то используем — http, если внутренний, то используем — относительный путь к файлу ).
Запускаем файл index.php:
header ( ‘Content-Type: text/html; charset=utf-8’ );
header( ‘Location: inc.php’ );
// — где inc.php — относительный путь к файлу
header ( ‘refresh: 5, url=inc.php’ );
// — адрес, на который должен быть перенаправлен пользователь
— после загрузки документа весь код у нас выполнился — выводится: привет мир!
После пятисекундной задержки нас перенаправляет на другой файл ( inc.php ) — выводится: привет из подключаемого файла .
Чтобы код не выполнялся используем любую из функций: либо exit , либо die .
header ( ‘Content-Type: text/html; charset=utf-8’ );
header( ‘Location: inc.php’ );
// — где inc.php — относительный путь к файлу
header ( ‘refresh: 5, url=inc.php’ );
exit ;
// die;
?>
— после загрузки документа код у нас не выполняется — видим пустую страницу.
После пятисекундной задержки перенаправляемся на другой файл — выводится: привет из подключаемого файла .
Проблемы вывода
Функция header отправляет заголовки в браузер. Они помогают коректно отобразить страницу. Эти заголовки должны бать отправленны раньше перед самим контентом страницы, поскольку браузер должен проанализировать заголовки и, в соответствии с ними, показать нашу страницу. Поэтому заголовки должны быть всегда отправленны до вывода , при этом заголовки могут отправлятся только один раз .
Если мы инициализируем вывод в браузер, то заголовки автоматически будут отправленны. Это значит, что если перед функцией header есть какой-то вывод в браузер, то она просто не отработает.
1. В этом легко убедиться, если в индексном файле поставим какой нибудь вывод, например, перенос строки перед функцией header :
— не удается изменить информацию заголовка — заголовки уже отправленны .
Выводом считается любой символ , который показывается в браузере, например, даже пробел.
2. С проблемой вывода можно столкнуться при подключении какого нибудь файла.
Например, мы подключаем файл inc.php, и в нем есть какая-то переменная — $test = ‘TEST’ .
В индексном файле мы хотим использовать данную переменную: $test ?> .
Как отдавать код ответа 404?
На сайте на каком-то незнакомом мне движке не обрабатывается ошибка 404. Что сделать для того, чтоб несуществующие страницы отдавали код ответа 404?
Оценить 3 комментария
Валерий Рябошапко: если обратиться к странице site.ru/blog/irbfowqribr то покажет содержимое страницы site.ru/blog
Lici: это довольно странное поведение. Имхо, проще спросить у человека, писавшего движок. Ну, или курить исходники с нуля.
header(«HTTP/1.0 404 Not Found»);
или более универсально для Apache
.htaccess
ErrorDocument 404 /error.html
geek01: я знаю как отдать код 404 для конкретной страницы через заголовок, но я не знаю как внедрить в движок проверку существования страниц.
Lici: c .htaccess все несуществующие страницы будут перенаправлены на error.html (в данном примере). Сервер определяет есть страница, или нету.
geek01: мм, могу и ошибаться. Но .htaccess содержит строки:
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond % ^/sitemap\.xml$
RewriteRule ^(.*)$ /sitemap [QSA,L]
Где-то что-то не так, что делать?
—————
Для начала разберитесь, где отрабатывает обработчик не найденной страницы, для этого придется разобраться с незнакомым вам фреймворком. Потом дополните этот вопрос конкретно тем, что у вас не получается))