Чтобы удалить index.html
или index.htm
из URL, я использую следующее в моем .htaccess
RewriteCond %{REQUEST_URI} /index\.html?$ [NC]
RewriteRule ^(.*)index\.html?$ "/$1" [NC,R=301,NE,L]
Это работает! (Подробнее о флагах в конце этого вопроса *)
Затем, чтобы добавить www
в URL, я использую следующее в моем .htaccess
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ "http://www.mydomain.com/$1" [R=301,NE,L]
Это тоже работает!
Вопрос здесь , как избежать двойного перенаправления, созданного правилами выше в случаях, подобных приведенному ниже:
- браузеры запрашивают
http://mydomain.com/path/index.html
- сервер отправляет заголовок
301
в браузер перенаправления на http://mydomain.com/path/
- затем браузер запрашивает
http://mydomain.com/path/
- теперь сервер отправляет заголовок
301
в браузер перенаправления на http://www.mydomain.com/path/
Это явно не очень умно, потому что бедный пользователь, который спрашивает http://mydomain.com/path/index.html
, будет перенаправлен дважды, и он будет чувствовать, что страница идет слишком медленно Более того, робот Google может прекратить переход по причине ссылки на двойное перенаправление (я не уверен в этом последнем и не хочу вступать в дискуссию по этому вопросу, это просто еще одна возможная проблема).
Спасибо!
* Кому это может быть интересно:
NC
используется также для перенаправления
файлы в верхнем регистре, т.е. INDEX.HTML
/
InDeX.HtM
NE
используется
чтобы избежать двойного кодирования URL я избегаю
http://.../index.html?hello=ba%20be
быть перенаправленным на
http://.../index.html?hello=ba%2520be
QSA
используется для перенаправления
также запросы, т.е.
http://.../index.html?hello=babe
до
http://.../?hello=babe
(не требуется благодаря anubhava answer )