Редиректы для сайта (сайт с www, без www и др)

Управление редиректами - задача, которую требуется решать на каждом проекте. Наиболее частые примеры задач:

  1. сайт открывается как www.site.ru и как site.ru, а нужно только www.site.ru,
  2. сайт открывается как www.site.ru и как site.ru, а нужно только site.ru,
  3. на сайт ссылается много доменов, нужно чтобы все домены вели только на один выбранный,
  4. сайт должен переводить пользователей с протокола http на https.

Большинство владельцев сайтов, и даже некоторые начинающие разработчики не знают, как же решать подобные задачи.

А решаются они достаточно просто - через файл .htaccess в корне сайта. Могу заметить, что сама по себе эта тема достаточно сложная, но в сети можно найти достаточно «рецептов» на все случаи жизни.

Хочу сразу предупредить - этот файл нельзя редактировать через админку сайта! Почему? Все очень просто - этот файл подключается при открытии любых страниц сайта, поэтому если редактируете через текстовый редактор сайта, то любая ошибка (в т.ч. опечатка) в этом файле приведет к тому, что весь сайт упадет, и возможности исправить тем же способом уже не будет. Поэтому, редактируйте этот файл только через FTP/SSH.

А теперь сами рецепты.

Как сделать, чтобы сайт site.ru открывался как www.site.ru

RewriteCond %{HTTP_HOST} ^site.ru
RewriteRule (.*) http://www.site.ru/$1 [R=301,L]

Как сделать, чтобы сайт www.site.ru открывался как site.ru

RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

Как сделать, чтобы сайт открывался только по одному адресу

RewriteCond %{HTTP_HOST} !^site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

Как сделать редирект из раздела сайта на другой сайт

Redirect 301 /ru http://example.com/ru

Как сделать редирект чтобы в конце добавлялся слеш

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)(?<!/)$ /$1/ [R=301,L]

Как сделать редирект с http на https

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Как сделать редирект с /index.php на / (не только для главной)

RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{THE_REQUEST} ^.*/index\.php
RewriteRule ^(.*)index.php$ /$1 [R=301,L] 

Если нужно чтобы сайт открывался только по https://www.site.ru - альтернативный вариант

RewriteCond %{HTTP_HOST} ^site.ru$ [NC]
RewriteRule ^(.*)$ https://www.site.ru%{REQUEST_URI} [R=301,L]
	
RewriteCond %{SERVER_PORT} !^443$ [NC]
RewriteRule .* https://www.site.ru%{REQUEST_URI} [R=301,L]

RewriteCond %{SERVER_PORT} 443
RewriteCond %{HTTP_HOST} !^www[.].+$
RewriteRule .* https://www.site.ru%{REQUEST_URI} [R=301,L]

Если стандартный редирект http на https не работает:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]


Автор: Денис Сон
Дата публикации: 12.05.2017
Просмотров: 675


Статья Вам помогла? Вы можете поблагодарить нас!

Комментарии

Иван
05.06.2017 10:17:51
Ух, спасибо, выручили! У меня были немного другие примеры, но они не очень хорошо работают
111111111
04.06.2017 11:08:11
Не хватает самого главного - редиректа 301.
Денис
02.06.2017 19:20:46
Спасибо. То что нужно
Нина
25.05.2017 10:53:42
Кстати, Ваш вариант редиректа .htaccess из http:// на https:// очень хоороший! Поменяла на своем сайте его и теперь пока лучше работает!
Нина
24.05.2017 19:10:59
Спасибо большое авторам блога!
Сергей
16.05.2017 12:46:50
Спасибо, очень выручили





По всем вопросам обращайтесь по нашим контактным данным:

Отзывы Все отзывы Написать отзыв

27.09.2017
Хочу сказать огромнейшее спасибо Денису. Мало того, что откликнулся минут за 10, так еще помог разобраться в проблеме с выводом текста в категориях буквально за пару писем :) А я два дня мучался в поисках решения...
Ребят, вы молодцы, доброе дело делаете :)
06.09.2017
Безмерно благодарна Денису!
Он смог выручить меня в трудную минуту.
Я являюсь котент-менеджером сайта, и по неосторожности что-то нажала, что публичная часть сайта исчезла. Денис отозвался на помощь, оперативно решил проблему и даже не взял за это денег!
После этого убедилась в высоком профессионализме Дениса.
Планируем заключить договор на обслуживание сайта и  надеюсь на дальнейшее долгосрочное сотрудничество!

04.04.2017
Денис - специалист своего дела!. Нет задачи, которую он бы не мог выполнить. Работаю с ним уже давно. Требовалось исправить и мелкие ошибки на сайте, и создать скрипты, реализовать на сайте некоторые пожелания, а также перенести сайт на новый шаблон. Ни разу меня не подводил. Работу делает быстро и качественно. Всегда на связи, всегда готов помочь. Огромное Вам спасибо!
27.02.2017
Денис безумно сильно нам помог. Обратился к нему так как очень давно он нам помог советом. Все началось с того что отказала вкладка маркетплейс , невозможно было обновить битрикс и установить нужные решения. Мы потратили неделю с другими программистами и толку ноль. Я написал Денису, он согласился помочь. Через 10 минут отписал что все готово проверьте.
Реально был в шоке. Вы помогли сохранить нервы и время . Если кто подумает что отзыв фэик то вот сайт akn-real.ru и телефоны на нем указаны можете позвонить я подтвержу без проблем.
27.12.2016
Сергей
Наверх