Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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 http://www.example.com/index.html and http://www.example.com/ yield the same content with two different URLs. I would like to have http://www.example.com/ 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
add comment

5 Answers

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
add comment
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 .* http://www.example.com/ [R=302,L]

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

share|improve this answer
add comment

RedirectMatch ^/index.html$ http://www.example.com/

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

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
add comment

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$ http://www.example.com/
AliasMatch ^/$ /var/www/index.html
share|improve this answer
add comment

Your Answer

 
discard

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.