Показать 404 страницы ошибок из файла PHP, без перенаправления

У меня есть файл secret.php который включен в index.php и я хочу показать страницу ошибки 404, когда кто-то пытается получить доступ к secret.php напрямую. Но

 header("Location: this_site_certainly_does_not_exist"); 

в secure.php не является решением, потому что я хочу, чтобы URL-адрес, который пользователь вводил (например, example.com/secret.php ), был видимым в строке URL-адреса браузера при отображении страницы с ошибкой вместо перенаправления.

Вы можете сделать это с помощью заголовков.

 header("HTTP/1.0 404 Not Found"); 

то вы можете добавить свою страницу 404, используя, например, метод readfile .

 header("HTTP/1.0 404 Not Found"); echo "<h1>404 Not Found</h1>"; echo "The page that you have requested could not be found."; exit(); 

Вам нужно отправить код статуса html 404 клиенту. Вы можете достичь этого: http://www.php.net/manual/en/function.http-response-code.php

Я не понимаю, почему вы хотите сохранить это в браузере, лучше всего перенаправить пользователя на страницу 404.

Я бы предложил сделать это с помощью apache (.htaccess) или перенаправления nginx.

Я не уверен в вашей архитектуре приложения, но Codeignter делает это, включая общий файл, который используется во всех файлах (в их случае index.php)

Файл index.php содержит определение

 define('BASEPATH', $system_folder.'/'); 

А затем в файлах, которые должны использоваться только при включении в другие файлы

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

Посмотрите, как вы можете принять эту схему для своей собственной ситуации.

для постоянного решения вы можете использовать .htaccess для перенаправления при вызове secret.php

  # Mod for redirecting specific URL requests to a custom error page RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} ^/secret.php [NC] RewriteRule . /your-error-page.php [L] # End of custom mod