5201
- 0
- Автор: Molchanov
- Обсудить на :на форуме
- Адаптировал: irbees2008
- Уровень сложности исполнения: это делается простым копированием и нажиманием кнопки
![]()
Решение проблемы постоянных редиректов на домен с или без WWW при помощи mod_rewrite без привязки к вашему домену. Работает на любом домене без необходимости править для каждого сайта. Все способы сохраняют исходный URI, изменяется только домен!
Для работы данного способа у вас в Apache должен быть включён модуль mod_rewrite. Если при добавлении указанных ниже строк вы получаете 500 ошибку — скорее всего дело в отсутствии данного модуля.
Для начала открываете (или создаёте новый) .htaccess файл в корне сайта и ищете там следующие строки, если нет — добавляете в конец:
Код:
RewriteEngine On
RewriteBase /
Принудительный редирект с субдомена www на обычный (простой способ для HTTP и стандартного порта):
Код:
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L]Если ваш сайт работает по HTTPS или на каком-то нестандартном порту, вам пригодится более мощный способ удаления www:
Код:
# В переменную окружения %{ENV:PROTOCOL} помещаем протокол
RewriteRule ^(.*)$ - [E=PROTOCOL:http]
RewriteCond %{HTTPS} ^on$ [NC]
RewriteRule ^(.*)$ - [E=PROTOCOL:https]
# Если нужно убираем www
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ %{ENV:PROTOCOL}://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ %{ENV:PROTOCOL}://%1:%{SERVER_PORT}%{REQUEST_URI} [R=301,L]Принудительный редирект с обычного домена на субдомен www (простой способ для HTTP и стандартного порта):
Код:
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]Для сайтов, доступных по HTTPS или на нестандартных портах также есть возможность принудительного добавления www:
Код:
# В переменную окружения %{ENV:PROTOCOL} помещаем протокол
RewriteRule ^(.*)$ - [E=PROTOCOL:http]
RewriteCond %{HTTPS} ^on$ [NC]
RewriteRule ^(.*)$ - [E=PROTOCOL:https]
# Если нужно добавляем www
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ %{ENV:PROTOCOL}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ %{ENV:PROTOCOL}://www.%{HTTP_HOST}:%{SERVER_PORT}%{REQUEST_URI} [R=301,L]Версия с удалением всех www в адресе (для HTTP и стандартного порта):
Код:
RewriteCond %{HTTP_HOST} ^(www\.)+(.*) [NC]
RewriteRule ^(.*)$ http://%2%{REQUEST_URI} [R=301,L]Версия с сохранением одного www в адресе (для HTTP и стандартного порта):
Код:
RewriteCond %{HTTP_HOST} ^www\.(www\.)+(.*) [NC]
RewriteRule ^(.*)$ http://www.%2%{REQUEST_URI} [R=301,L]Код:
<IfModule mod_rewrite.c>
# Инструкции для mod_rewrite здесь
</IfModule>
То есть в результате, например, для простого способа удаления www из адреса у вас должно получиться что-то вроде:
Код:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,L]
</IfModule>
Можешь почитать и вот эту статейку "Переезд, как?"
Это тоже интересно
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.




