Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

То, что вы делаете, будет работать, и браузер получит код 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

Ответ 3

Попробуйте следующее:

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

Ответ 4

Создание собственных страниц ошибок через файл .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

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

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

Ответ 6

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

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

в файле .htaccess.

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

Ответ 7

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

<?php
  if(condition){
    do stuff;
  } else {
    include('index.php');
  }
?>

Ответ 8

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

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

или же

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