Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

For aesthetic reasons (I prefer when there is a strict one-to-one mapping between URL and pages), I do not like the fact that and yield the same content with two different URLs. I would like to have as the canonical one.

The obvious solution:

Redirect permanent /index.html /

is wrong (endless loop).

A better solution? It seems surprisingly difficult.

share|improve this question

Try a RewriteCond from mod_rewrite:

RewriteEngine On
RewriteCond %{QUERY_STRING} !^/$
RewriteRule /index.html / [R]

This says if the query string is not / then rewrite /index.html as / (should not loop).

share|improve this answer
Thanks, clearly the best solution (I adapted it a bit and, since I do not have enough points to edit your answer, I created mine). – bortzmeyer Aug 29 '10 at 21:15
up vote 2 down vote accepted

My solution (which seems to work so I accepted it), inspired from PP's response, is:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^\/index\.html$
RewriteRule .* [R=302,L]

Any non-modrewrite solution? I had to activate a new Apache module, which I try to avoid.

share|improve this answer

RedirectMatch ^/index.html$

share|improve this answer
I tried and it loops endlessly. – bortzmeyer Aug 25 '10 at 9:33

Why not set DirectoryIndex to something else - e.g., unpredictable.html, and name your index file similarly?

DirectoryIndex unpredictable.html
Redirect permanent /index.html http://yoursite/

You need never expose the chosen DirectoryIndex value.

Note that the last argument to Redirect needs to be a full URL, not just a path fragment.

share|improve this answer
Nice and clever idea but, still, if someone uses the /unpredictable.html URL, it will get to the content of the index page. – bortzmeyer Aug 25 '10 at 9:43

A non mod_rewrite solution… Actually joschi nearly had it but for some (unclear to me) reason you have to kludge around the endless loop:

RedirectMatch permanent ^/index\.html$
AliasMatch ^/$ /var/www/index.html
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.