PHP - отображение ошибки 404 без перенаправления на другую страницу

Я хочу показать ошибку 404, если пользователь достигает страницы, которая существует, но я не хочу, чтобы он/она видели.

Я не хочу делать перенаправление (это приведет к тому, что адресная строка отобразит ссылку страницы ошибки в адресной строке), как показано ниже:

if ($this_page_should_not_be_seen)
   header("Location: err.php?e=404");

Вместо этого должно показаться, что страница действительно не существует, без изменения URL-адреса в адресе браузера.

Ответ 1

Включите страницу с ошибкой на текущей странице и отправьте код ошибки 404:

<?php
if ($nobody_should_ever_be_here) {
  header('HTTP/1.1 404 Not Found'); //This may be put inside err.php instead
  $_GET['e'] = 404; //Set the variable for the error code (you cannot have a
                    // querystring in an include directive).
  include 'err.php';
  exit; //Do not do any more work in this script.
}
?>

Обратите внимание, что это следует использовать, если страница никогда не должна отображаться. Лучший код состояния для несанкционированного доступа (если страница должна быть замечена некоторыми зарегистрированными пользователями) составляет 403 (не авторизован).

Ответ 2

Вы можете получить 404 (или любой другой код ответа HTTP действительно) программно с помощью

header('HTTP/1.0 404 Not Found');
die;

Ответ 3

В моем опыте лучший способ показать 404 документ ошибки без изменения URL-адреса - определить документ ошибки в файле apaches .htaccess:

RewriteEngine on
RewriteBase /

# Defines 404 error pages content:
ErrorDocument 404 /my_root/errors/404.html

# for all invalid links (non existing files):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* - [L,R=404]

# for some valid links (existing files to be un-accessible):
RewriteCond %{THE_REQUEST} ^.*some_file.php.*$ [NC]
RewriteRule .* - [L,R=404]

Ответ 4

То, что вы пишете, затрудняет нам понимание.

Я хочу перенаправить любого входящего пользователя на страницу ошибок 404, если s/he достигает страницы, на которую я не хочу, чтобы он достиг.

Итак, человек достигает страницы, которая существует?

Если человек достигает, например, защищенной страницы, которую он/она не поддерживает, чтобы видеть. Использование заголовка - лучший способ. Ваши варианты - эхо метаобновление или javascript, но заголовок намного чище. Вы можете отобразить что-то вроде You do not have permission to do that!, которое довольно часто встречается в Интернете. Если вы не хотите перенаправлять, вы можете отобразить 404 "поддельное сообщение" через заголовок.

Если вы говорите о том, что кто-то достиг 404 страницы, файл, который не существует, вы можете использовать только .htaccess