Как создать ошибку 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. Что это!--3-->не do отображает страницу" не найдено", которую вы могли бы ожидать, например:

Не Нашел

запрошенный 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) 

на .

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


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

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

или

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