Назад | Перейти на главную страницу

Перенаправление http://www.example.com/index.html на http://www.example.com/ (без зацикливания)

По эстетическим соображениям (я предпочитаю, когда между 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]

идеальное решение