Apache: Redirect 404 and ErrorDocument 404 difference

I would like to do a 404 redirect with Apache, and I find several solutions:

  1. The .htaccess method. But I don't want to add a .htaccess if not necessary.

  2. virtual host method:

<VirtualHost *:80>
    ServerAlias *.example.com
    Redirect 404 /index.html
    ErrorDocument 404 /index.html
</VirtualHost>

I would like to know what's the difference Redirect 404 and ErrorDocument 404?


Did you test with Redirect directive?

Redirect 404 /index.html means that a 404 response will return when the client request /index.html (even if it could possibly exist).

ErrorDocument 404 /index.html means that when the client access a non exist URL, Apache will redirect to index.html page.

You must use ErrorDocument in this case.


The two are generally unrelated. When I just tried to set up a redirect with a 404 status I got the error message Redirect URL not valid for this status when trying to start apache.

A Redirect sends the client to a new address and provides a status for the client. The status returned are usually 30x values.

The ErrorDocument directive configures apache to return a particular page (rather than the default page) when an error of type nnn occurs. In your example you are saying return /index.html when a 404 (Not Found) error occurs.

What are you trying to achieve ?


If you configure the ErrorDocument directive correctly, all you have to do is make sure the file is not actually present. If you are trying to match a filename pattern, then you need to match the pattern and rewrite the request to a non-existant response. And make sure to turn off directory browsing:

<VirtualHost *:80>
 Options -Indexes
 ErrorDocument 404 /not-found.htm
 AliasMatch /index\.* /something/not/here
</VirtualHost>