Склейка доменов
Если один и тот же сайт доступен по разным адресам, то эти домены лучше «склеить» — представить поисковой системе основной сайт и указать неосновные, чтобы все адреса для поисковика представляли один сайт. Иначе для него все сайты будут отдельными и какому он отдаст предпочтение — не известно.
Недавно на всякий случай зарегистрировал домен lampdev.ru, мало ли кто нибудь зарегистрирует и есть вероятность что трафик будет уплывать при наборе адреса сайта на память. Вообще говоря большинство пользователей я думаю набирает сайты без дефисов, в чём мой промах, так как изначально зарегил с дефисом.
И так, склеиваем домены. Пропишем в конфигурационном файле Apache следующие директивы. При этом должен быть установлен модуль mod_rewrite. Для моего домена правила выглядят так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / #begin RewriteCond %{HTTP_HOST} ^lampdev.ru$ [OR] RewriteCond %{HTTP_HOST} ^www.lampdev.ru$ [OR] RewriteCond %{HTTP_HOST} ^www.lamp-dev.ru$ RewriteRule ^(.*)$ http://lamp-dev.ru/$1 [R=301,L] #end # далее какие нибудь ваши директивы для модуля mod_rewrite </IfModule> |
Основной домен — это lamp-dev.ru — с дефисом. Не основные lampdev.ru, www.lampdev.ru, www.lamp-dev.ru.
Если дословно описать правило, то: проверяется имя хоста, к которому обращается пользователь, если это lampdev.ru или www.lampdev.ru или www.lamp-dev.ru, то браузеру отдавать перманентный редирект с кодом 301 на основной домен lamp-dev.ru.
Директивы между #begin и #end надо писать до ваших команд для mod_rewrite, так как если сначала сработают ваши правила, то до этих скорее всего дело не дойдёт. А нам надо сначала разобраться с основным доменом, ну а после хоть потоп. Почему скорее всего? Потому что до этого могут правила с параметром L, вот как в нашем
1 2 |
RewriteRule ^(.*)$ http://lamp-dev.ru/$1 [R=301,L] |
L означает last, то есть последнее обрабатываемое правило, далее всё игнорируется.
UPD Вскоре после этого на другом ресурсе мне понадобилось склеить домен в зоне .рф с доменом в зоне .ru, при этом домен в зоне ru должен быть основным. И так….
Склейка доменов .рф c .ru
Допустим мы склеиваем домен президент.рф с главным доменом kremlin.ru, при этом все домены, будь то кириллический или на латинице, начинающийся на www., должны редиректиться на kremlin.ru. При этом путь до документа — URI должен сохранятся. Получится следующее.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / #begin RewriteCond %{HTTP_HOST} ^www\..*$ [OR] RewriteCond %{HTTP_HOST} ^xn--d1abbgf6aiiy.xn--p1ai$ RewriteRule ^(.*)$ http://kremlin.ru/$1 [R=301,L] #end # далее какие нибудь ваши директивы для модуля mod_rewrite </IfModule> |
Посмотрим поподробнее. В правилах мы не видим домен на кириллице. Потому что вместо этого вставлен Punycode для домена президент.рф — xn--d1abbgf6aiiy.xn--p1ai. Сгенерировал я его здесь.
Если дословно, по правилам 1) если хост начинается на www. ( причём сюда входит и www.президент.рф), или 2) хост президент.рф(xn--d1abbgf6aiiy.xn--p1ai), то 3) перманентно редиректить на kremlin.ru без www с сохранением пути к файлу, папке, скрипту — URI в общем.
Для надёжности в вебмастере Яндекса можно указать явные зеркала.
В целом полезное руководство.