问题
Why is this not working, as in the pre-set 404 page is not loaded:
header("HTTP/1.0 404 Not Found");
exit;
.htaccess
has the ErrorDocument 404 /404.html
directive set.
Thank you.
回答1:
Make sure your customized error page /404.html
has the content size greater than 512 bytes. Many browsers like IE, Chrome etc don't show your customized page if content length of your custom 404 page is less than 512.
UPDATE
Based on your comments here is what I think is happening.
If you look at the access.log or http headers in Firebug/HTTP Watch etc of this blank page, you'd see a 404 return code. Once the web server starts processing the PHP page, it's already passed the point where it would handle 404 handling by itself since your php file is actually FOUND. Now since your php code is merely returning status 404 without any content therefore a blank page gets displayed.
Now since this is correct apache behavior and its up to you to create the contents for the 404 page. Something like this in your above php code will be fine I think:
<?php
header("HTTP/1.0 404 Not Found");
exit("<h1>Not Found</h1>
The requested URL " . $_SERVER["REQUEST_URI"] . " was not found on this server.
<hr>");
?>
回答2:
I unfortunately came across the same issue recently whilst working on a PHP project for work.
Sending a header is essentially only a 'status message', and doesn't make the browser or server show a particular page (although I believe some older versions of IE may show its default 404 page). This means that you will need to create your own 404 error message in your script, as the .htaccess error handling wont work.
My suggestion is to use something along the lines of
header("HTTP/1.0 404 Not Found");
include('./404.html');
exit;
I know it may seem stupid, but so far it's the only way I've found that will work.
回答3:
This is mostly likely because Apache has already passed the initial request off to a PHP page to handle. Most likely because you have a front controller implementation in effect and are redirecting all web requests to this page. This leaves the responsibility of 404s to your application along with an appropriate 404 page to display.
来源:https://stackoverflow.com/questions/5914120/php-header-404-not-working