По эстетическим соображениям (я предпочитаю, когда между URL-адресом и страницами строго однозначное соответствие), мне не нравится, что http://www.example.com/index.html и http://www.example.com/ дают один и тот же контент с двумя разными URL-адресами. Я бы хотел http://www.example.com/ как канонический.
Очевидное решение:
Redirect permanent /index.html /
неправильно (бесконечный цикл).
Лучшее решение? Это кажется на удивление сложным.
Мое решение (которое, похоже, работает, поэтому я его принял), вдохновленное ответом PP, следующее:
RewriteEngine on RewriteCond %{REQUEST_URI} ^\/index\.html$ RewriteRule .* http://www.example.com/ [R=302,L]
Любое решение без модификации? Мне пришлось активировать новый модуль Apache, чего я стараюсь избегать.
Попробуйте RewriteCond
из mod_rewrite:
RewriteEngine On
RewriteCond %{QUERY_STRING} !^/$
RewriteRule /index.html / [R]
Это говорит о том, что строка запроса не /
затем переписать /index.html
так как /
(не должно зацикливаться).
RedirectMatch ^/index.html$ http://www.example.com/
Почему бы не установить для DirectoryIndex другое значение, например, unpredictable.html, и присвоить такое же имя вашему файлу индекса?
DirectoryIndex unpredictable.html
Redirect permanent /index.html http://yoursite/
Вам никогда не нужно раскрывать выбранное значение DirectoryIndex.
Обратите внимание, что последний аргумент Redirect должен быть полным URL-адресом, а не только фрагментом пути.
Решение без mod_rewrite ... На самом деле у Джоши оно почти было, но по какой-то (непонятной для меня) причине вам приходится бродить по бесконечному циклу:
RedirectMatch permanent ^/index\.html$ http://www.example.com/
AliasMatch ^/$ /var/www/index.html
RewriteEngine on
RewriteCond %{REQUEST_URI} ^\/index\.html$
RewriteRule .* http://www.example.com/ [R=302,L]
идеальное решение