Ваша очевидная файловая структура:
/
.htaccess
request.php
...
errors/
junk.php
.htaccess
ErrorDocument 404 /errors/junk.php
request.php
header('HTTP/1.1 404 Not Found', true, 404);
echo "Despite the 404 header this ~file~ actually exists as far as Apache is concerned.";
exit;
errors/junk.php
header('HTTP/1.1 404 Not Found', true, 404);
echo "The file you're looking for ~does not~ exist.";
echo "" . var_export($_SERVER, TRUE) . "
";
exit;
http://yoursite.com/request.php will show:
Несмотря на 404 заголовка этот ~file ~ на самом деле существует, насколько апач заинтересован.
http://yoursite.com/filethatdoesntexist.php will show:
Файл вы ищете ~does не ~, существует.
[свалка $ _SERVER, который может быть полезным в написании таможенных 404 кодов укладчика]
Если у вас есть файл, который существует, но вы хотите, чтобы он притворился, что это - 404, можно или написать перенаправление в PHP как:
header('Location: http://mysite.com/errors/junk.php');
exit;
Который перенаправит браузер к полному URL, или просто:
include('errors/junk.php');
exit;
Который оставит пользователя в том же самом URL страницы, но представит ваш код ошибки.