3 редиректа в .htaccess с которыми мне регулярно приходится сталкиваться

Пару дней назад лазил по закладкам в своём браузере и нашёл две ссылки на примеры того, как правильно сделать 301-й редирект со старого домена на новый с сохранением URL всех внутренних страниц сайта, а также как сделать редирект с www на без-www и наоборот. А так как закладок и так целая куча, я решил, что лучше объединить эти примеры в один пост у себя на сайте, кроме того, добавив ещё и пример с редиректом на https://.

Думаю, что в настоящее время практически на всех хостингах уже стоят все необходимые модули апач, но всё же я упомяну, что для работы всех примеров из этого поста вам нужен модуль mod_rewrite. Без него ничего не получится. Проверить это можно либо на деле, начав использовать эти примеры, либо при помощи функции phpinfo(), либо написав в супорт хостинга в конце концов.

Добавлять код нужно в тот файл .htaccess, который лежит в корне сайта, если там нет такого файла, то создайте его сами.

1. Редирект со старого домена на новый с сохранением URL каждой страницы

Да, неоднократно приходится осуществлять переезд сайтов с одного домена на другой. Если это был какой-то тестовый домен, даже не индексируемый поисковиками, то можно не париться вообще. Однако если вам важно сохранить трафик, то нельзя оставлять это дело на самотёк, нельзя на старый сайт ставить загрушку «Сайт переехал», также нельзя использовать редирект через директиву Redirect 301, так как она все страницы старого сайта будет перенаправлять лишь на главную нового.

Нам же важно, чтобы каждый URL старого домена редиректил на ту же самую страницу на новом домене.

RewriteEngine On
# truemisha.com - старый домен, truemisha.ru - новый, не забудьте заменить на свои значения
RewriteCond %{HTTP_HOST} ^truemisha.com [NC]
RewriteRule ^(.*)$ http://truemisha.ru/$1 [L,R=301]

2. Редирект с http:// на https://

Если ваш сайт на WordPress, то прежде всего вам нужно зайти в Настройки > Общие и добавить в оба поля с URL сайта https://. Более подробно об этом я уже писал здесь.

RewriteEngine on
# если первая строка уже присутствует в вашем .htaccess файле, то второй раз вставлять её ни к чему
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [L,R=301]
# дальше пойдут правила постоянных ссылок WordPress, если таковые имеются

3. Редирект на www

Аналогично предыдущему пункту, если вы реализуете данное на WordPress, то прежде всего вам нужно зайти в Настройки > Общие и выставить www там, и только потом уже можно что-то думать относительно .htaccess.

RewriteEngine On
#понятное дело, что вместо truemisha.ru указываем URL собственного домена
RewriteCond %{HTTP_HOST} ^truemisha.ru [NC]
RewriteRule ^(.*)$ http://www.truemisha.ru/$1 [L,R=301]

и назад с www на без www:

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

Если у вас что-то не получается или какой-то из примеров работает не так, как нужно на вашем сайте, пожалуйста, опишите свою проблему в комментариях, постараюсь вам помочь.

Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Привет, ну либо через Javascript, либо через save_post хук, скорее второе.

  • Дмитрий: Миша, а возможно ли задать условие, что если существует meta_key, то соответствующая таксономия будет нажата в метабоксе...

  • Дмитрий: Спасибо за подсказку. Получилось передать сразу нужный meta_key через value в hidden input.

  • Артем: Вот про сей хук я запамятовал)) Спасибо!

  • Миша: Думаю, что $mail_2 - пустая переменная по той простой причине, что $post->ID не существует. Глобальная переменная $po...