Как я могу создать ошибку 404 в PHP?
Мой .htaccess перенаправляет все запросы на /word_here
на /page.php?name=word_here
. Затем PHP-скрипт проверяет, находится ли запрошенная страница в его массиве страниц.
Если нет, то как я могу имитировать ошибку 404?
Я попробовал это, но это не привело к тому, что моя страница 404, настроенная через ErrorDocument
, появилась в .htaccess
.
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
Прав ли я, думая, что неправильно перенаправлять на мою страницу с ошибкой 404?
7 answers
Актуальный ответ (начиная с PHP 5.4 или новее) для создания 404 страниц заключается в использовании http_response_code
:
<?php
http_response_code(404);
include('my_404.php'); // provide your own HTML for the error page
die();
die()
это не является строго необходимым, но это гарантирует, что вы не продолжите обычное выполнение.
То, что вы делаете, будет работать, и браузер получит код 404. Что он не будет делать, так это отображать страницу "не найдено", которую вы могли бы ожидать, например:
Не найдено
Запрошенный URL-адрес/test.php не был найден на этом сервере.
Это потому, что веб-сервер не отправляет эту страницу, когда PHP возвращает код 404 (по крайней мере, Apache этого не делает). PHP отвечает за отправку всех своих собственных выходных данных. Поэтому, если вам нужна похожая страница, вам придется отправить HTML себя, например:
<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
include("notFound.php");
?>
Вы можете настроить Apache на использование той же страницы для собственных 404 сообщений, поместив это в httpd.conf:
ErrorDocument 404 /notFound.php
Попробуйте это:
<?php
header("HTTP/1.0 404 Not Found");
?>
Создавайте пользовательские страницы ошибок до конца.файл htaccess
1. 404 - страница не найдена
RewriteEngine On
ErrorDocument 404 /404.html
2. 500 - Внутренняя ошибка Сервера
RewriteEngine On
ErrorDocument 500 /500.html
3. 403 - Запрещено
RewriteEngine On
ErrorDocument 403 /403.html
4. 400 - Плохой запрос
RewriteEngine On
ErrorDocument 400 /400.html
5. 401 - Требуется Авторизация
RewriteEngine On
ErrorDocument 401 /401.html
Вы также можете перенаправить все ошибки на одну страницу. как будто
RewriteEngine On
ErrorDocument 404 /404.html
ErrorDocument 500 /404.html
ErrorDocument 403 /404.html
ErrorDocument 400 /404.html
ErrorDocument 401 /401.html
Вы не забыли умереть() после отправки заголовка? Заголовок 404 не останавливает обработку автоматически, поэтому может показаться, что он ничего не сделал, если происходит дальнейшая обработка.
Нехорошо ПЕРЕНАПРАВЛЯТЬ на вашу страницу 404, но вы можете без проблем ВКЛЮЧИТЬ содержимое с нее. Таким образом, у вас есть страница, которая правильно отправляет статус 404 с правильного URL-адреса, но на ней также есть ваша страница "что вы ищете?" для читателя-человека.
Попробуйте положить
ErrorDocument 404 /(root directory)/(error file)
В файле .htaccess
.
Сделайте это для любой ошибки, но замените свою ошибку 404.
Сразу после этой строки попробуйте закрыть ответ с помощью exit
или die()
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
exit;
Или
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
die();