Typical scenario:
- DB items are displaied in page
http://...?item_id=467
- User one day deletes the item
- Google or a user
attempts to access
http://...?item_id=467
- PHP diggs into DB and sees items does not exist anymore, so now PHP must tell Google/user that item is not existing via a 404 header and page.
According to this answer I undertstood there is no way to redirect to 404 Apache page via PHP unless sending in code the 404 header + reading and sending down to client all the contents of your default 404 page.
The probelm: I already have an Apache parsed custom 404.shtml page, so obvioulsy I would like to simply use that page. But if i read an shtml page via PHP it won't be parsed by Apache anymore.
So what do you suggest me to do?
Is there maybe some trick I could use palying with htaccess too?
Thanks,
I was trying to do this exact same thing yesterday.
Does Pekka's file_get_contents/include result in a 404 status header being sent? Perhaps you need to do this before including the custom error page?
You can test using this Firefox extension.
I was looking exactly for something like you needed, so you have a page:
and if later you want that if item is missing you are redirected to:
In reality I found it is much more maintainable solution to just use the original page as 404 page.
So if item is no longer in the DB, the 404 page is showed but you can provide custom items in replace or error messages.
Hmm. Two ideas come to mind:
Redirect to the 404 page using
header("Location:...")
- this is not standards-compliant behaviour though. I would use that only as a last strawFetch and output the Apache-parsed SHTML file using
file_get_contents("http://mydomain.com/404.shtml");
- also not really optimal because a request is made to the web server but, I think, acceptable in most cases.I doubt there is anything you can do in
.htaccess
because the PHP script runs after any rewrite rules have already been parsed.IF you are using apache mod_php, use
virtual('/404.shtml');
to display the parsed shtml page to your user.