У меня есть файл 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