Based on the conversation you had, you would like to not have to change the path to the error document when you move your project to another folder with a different name.
Firstly, you cannot use variables when using ErrorDocument
. The path that you provide must be static. The path that you specify must be either to an external URL (in which case your browser will be redirected) or to a file relative to your document root (i.e. localhost
).
Unfortunately, ErrorDocument
won't be able to find the file relative to the current directory (i.e. project
). The only logical way of doing this would be to remove the leading slash, but this would cause Apache to render that as a string in the browser.
This brings us to the only other possible solution: mod_rewrite
. The only problem with using it, however, is that it is processed early on in the mapping pipeline which may allow other modules (such as mod_proxy) to affect the process.
That said, you can try with the following:
/project/.htaccess
:
RewriteEngine on
# Determine if the request does not match an existing file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# If so, send the request to the applicable file, relative to this directory
RewriteRule ^ errordocs/404.php [L]
# Per your comment and suggested edit, add the following.
# Note: This should not make any difference as mod_rewrite and PHP should
# already handle the error document.
ErrorDocument 404 /errordocs/404.php
/project/errordocs/404.php
:
This file will send the 404 header as .htaccess
won't be able to do that.
<?php header("HTTP/1.0 404 Not Found"); ?>
<h1>Sorry, we couldn't find that...</h1>
<p>The thing you've requested doesn't exist here. Perhaps it flew away?</p>