Как я могу создать ошибку 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 71

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

попробуйте это:

<?php
header("HTTP/1.0 404 Not Found");
?>

создание пользовательских страниц ошибок с помощью .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, но у нее также есть Ваш "что вы ищете?- страница для читателя-человека.

положить

ErrorDocument 404 /(root directory)/(error file) 

на .

сделайте это для любой ошибки, но заменить 404 для вашей ошибки.

сразу после этой строки попробуйте закрыть ответ с помощью exit или die()

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
exit;

или

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
die();