Заезженная до дыр тема, обсуждаемая на всех форумах про Apache и mod_rewrite, но, тем не менее, не потерявшая своей актуальности до сих пор.
Правильное решение:
- Перенаправление с
www.domain.com
наdomain.com
:[-]View Code Apache configurationRewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*) http://%1/$1 [L,R=301]www.
, отрезаемwww.
и выполняем редирект. Я предпочитаю перенаправление с кодом 301, у Вас могут быть свои предпочтения. - Перенаправление с
domain.com
наwww.domain.com
:[-]View Code Apache configurationRewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} (.+)$
RewriteRule ^(.*) http://www.%1/$1 [L,R=301]www.
. Добавляемwww.
к имени хоста и выполняем редирект.
Разумеется, что mod_rewrite должен быть включен (RewriteEngine On
). В целях повышения производительности имеет смысл помещать код не в .htaccess
, а непосредственно внутрь директивы <VirtualHost>
конфигурационного файла Apache.
Здесь рассмотрен простой случай: протокол HTTPS не используется. Реализация перенаправления с использованием HTTPS остаётся домашним заданием читателю
Спасибо!
Только что себе настроил редирект, по первому варианту - все работает!
Да просто поправлял сайт заказчику… Он умудрился так настроить редирект, что Apache просто выдавал 500 Server Error. А последней каплей была статья, описывавшая, как сделать подобный редирект (естественно, примеры были нерабочими). Поэтому я решил найти решение, которое будет работать независимо от имени домена (а также в тех случаях, когда сайт “отзывается” на несколько имен).
спасибо, отличный кодик. подскажи еще код редиректа с одного домена на другой. например: при заходе на site.com перекидывает на site2.com. буду благодарен тебе.
Так должно работать:
Это все хорошо. Но при некоторых настройках сервака, эти функции не пашут. Например при FastCGI
Да ну? А ничего, что переписывание URL’ов происходит до работы всяких там FastCGI?
подскажи плиз, на виртуальном хосте прописываю указанные выше правила редиректа, а при попытке зайти на страницу у меня в конце адреса прибавляется дополнительный слэш, как с этим бороться, уже практически все перепробывал.
И еще, обязательно ли указывать
ServerAlias
в директиве в видеwww.domain.com domain.com
Возможно, что слэш добавляет софт, который Вы используете. Нужно смотреть на сайт, с ходу я вряд ли что скажу.
ServerAlias
— в общем случае, да.Поковырял правило, сделал правило таким образом
http://%1$1 [L,R=301]
все заработало, с www на без www редирект проходит нормально. Все равно спасибо.Добрый день Владимир,
так подскажите пожалуйста, как выполнить редирект с
https://www.domain.com
наhttps://domain.com
?Заранее спасибо.
Роман, под рукой Apache/SSL сейчас нет, но должно быть так:
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} (.+)$
RewriteRule ^(.*) https://www.%1/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*) http://%1/$1 [L,R=301]
С www на не-www не работает…
Упс, там опечатка. Вместо
%{HHTPS}
должно быть%{HTTPS}
.я это исправил, но все равно не работает, могут быть проблемы из-за чпу?
заранее спасибо.
Добрый день Владимир,
подскажите как выполнить редирект с
http://www.serkin.domain.com
наhttp://serkin.domain.com