Как я могу создать ошибку 404 в PHP?
мой .htaccess перенаправляет все запросы на /word_here
to /page.php?name=word_here
. Затем PHP-скрипт проверяет, находится ли запрошенная страница в массиве страниц.
если нет, то как я могу смоделировать ошибку 404?
Я попробовал это, но это не привело к моей странице 404, настроенной через ErrorDocument
на .htaccess
появляться.
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
правильно ли я понимаю, что это неправильно, чтобы перенаправить на страницу ошибки 404?
7 ответов:
последний ответ (начиная с 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. Что это не do-это отображение страницы "не найдено", которую вы могли бы ожидать, например:
Не Нашел
запрошенный URL / тест.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
создание пользовательских страниц ошибок с помощью .htaccess file
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, но у нее также есть Ваш "что вы ищете?- страница для читателя-человека.