Вопрос:

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

php redirect http-status-code-404

134239 просмотра

8 ответа

66488 Репутация автора

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

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

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

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

Автор: Eric Источник Размещён: 04.09.2009 07:29

Ответы (8)


20 плюса

102758 Репутация автора

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

<?php
header("HTTP/1.0 404 Not Found");
?>
Автор: Ates Goral Размещён: 04.09.2009 07:36

77 плюса

36092 Репутация автора

То, что вы делаете, будет работать, и браузер получит код 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
Автор: JW. Размещён: 04.09.2009 07:50

3 плюса

58762 Репутация автора

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

НЕДОПУСТИМО ПЕРЕПРАВИТЬ на страницу 404, но вы можете ВКЛЮЧИТЬ ее содержимое без проблем. Таким образом, у вас есть страница, которая должным образом отправляет статус 404 с правильного URL, но на нем также есть «что вы ищете?» страница для читателя.

Автор: Eli Размещён: 04.09.2009 07:50

5 плюса

2540 Репутация автора

Создание пользовательских страниц ошибок через файл .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
Автор: Irshad Khan Размещён: 30.03.2016 10:34

91 плюса

2604 Репутация автора

Решение

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

Автор: blade Размещён: 11.01.2017 02:28

0 плюса

13 Репутация автора

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

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

в .htaccessфайле.

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

Автор: the red crafteryt Размещён: 20.05.2018 07:41

-1 плюса

25 Репутация автора

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

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

или же

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
die();
Автор: user5891645 Размещён: 25.05.2018 04:22

0 плюса

1426 Репутация автора

В Wordpress, если вы пытаетесь заставить некоторый пользовательский php-код казаться несуществующим (если не выполняется какое-то условие), следующее работает хорошо, заставляя стандартный обработчик Wordpress 404 вступать во владение:

<?php
  if(condition){
    do stuff;
  } else {
    include('index.php');
  }
?>
Автор: Mike Godin Размещён: 28.01.2019 07:38
Вопросы из категории :
32x32