Как я могу создать ошибку 404 в PHP?


Мой .htaccess перенаправляет все запросы на /word_here на /page.php?name=word_here. Затем PHP-скрипт проверяет, находится ли запрошенная страница в его массиве страниц.

Если нет, то как я могу имитировать ошибку 404? Я попробовал это, но это не привело к тому, что моя страница 404, настроенная через ErrorDocument, появилась в .htaccess.

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

Прав ли я, думая, что неправильно перенаправлять на мою страницу с ошибкой 404?

Author: Eric, 2009-09-04

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() это не является строго необходимым, но это гарантирует, что вы не продолжите обычное выполнение.

 72
Author: blade, 2018-02-16 13:52:58

То, что вы делаете, будет работать, и браузер получит код 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
 77
Author: JW., 2016-03-23 14:47:07

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

<?php
header("HTTP/1.0 404 Not Found");
?>
 19
Author: Ates Goral, 2009-09-04 19:36:11

Создавайте пользовательские страницы ошибок до конца.файл 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
 5
Author: Irshad Khan, 2016-03-30 10:34:41

Вы не забыли умереть() после отправки заголовка? Заголовок 404 не останавливает обработку автоматически, поэтому может показаться, что он ничего не сделал, если происходит дальнейшая обработка.

Нехорошо ПЕРЕНАПРАВЛЯТЬ на вашу страницу 404, но вы можете без проблем ВКЛЮЧИТЬ содержимое с нее. Таким образом, у вас есть страница, которая правильно отправляет статус 404 с правильного URL-адреса, но на ней также есть ваша страница "что вы ищете?" для читателя-человека.

 3
Author: Eli, 2009-09-04 19:50:55

Попробуйте положить

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

В файле .htaccess.

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

 -1
Author: the red crafteryt, 2018-05-20 20:06:05

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

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

Или

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
die();
 -1
Author: user5891645, 2018-05-25 04:22:01