Для поисковых систем домен с www и домен без www - это два разных ресурса и для того, чтобы они правильно его воспринимали, индексировали и ранжировали как единое и уникальное целое нужен 301 редирект ("перенесен навсегда") с одного домена на другой.
Самый простой вариант редиректа - при помощи файла .htaccess, который находится в корне сайта, для его осуществления необходим включенный модуль mod_rewrite.
Чтобы вы не тупили на тему, как настроить 301 редирект, можете использовать следующие коды.
С одной страницы на другую
Самый частый случай — это именно редирект с одной страницы на другую. Редиректы с без www на домен с www и так далее я даже не настраиваю, так как большинство моих сайтов сделаны на движке WordPress, а там все эти редиректы настроены по умолчанию. А вот переадресация страницы — это то, что мне бывает частенько нужно. Вот как прописать 301 редирект таким образом:
Redirect 301 /was.php http://www.site.ru/new.php
Новый адрес нужно обязательно указывать с http и доменным именем. Где was.php — там адрес старой страницы, соответственно вместо www.site.ru/new.php также прописывайте свой вариант.
С www на без www
Обычно редирект используют для перемещения на сайт без www, и я думаю это правильно — лишняя приписка не нужна. Для нового сайта рекомендую перемещение на вариант без www, а для старого главным зеркалом нужно указывать тот вариант, который уже находится в индексе поисковой системы.
Как провести редирект с www на без www:
RewriteCond %{HTTP_HOST} ^www.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
С без www на www
Если планируется редирект с без www на www, используется другой код:
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
С одного домена на другой
Вот как делается редирект на другой сайт:
RewriteCond %{HTTP_HOST} ^old-site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
Редирект с одного домена на другой полезен, например, при переезде сайта на новый домен.
С https на http
Как сделать редирект на http:
RewriteCond %{HTTPS} "on"
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Если и так не получиться то замените стоку RewriteCond %{HTTPS} on на вот эту строку
RewriteCond %{SERVER_PORT} ^443$
или
RewriteBase /
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://test.com/$1 [R=301,L]
С http на https
Как сделать 301 редирект на https:
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
Со страниц со слешем / на конце на страницы без слеша
Некоторые месье любят извращения, и хотят с уже нормально работающих и располагающихся в индексе страниц со слешем на конце настроить редирект на страницы без слеша.
RewriteCond %{REQUEST_URI} !\?
Со страниц без слеша на конце на страницы со слешем
Переадресация 301 на страницы со слешем на конце:
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]
Убираем index.php
Если у нас страница site.ru/index.php отдает код 200 ОК, то нужно её убрать нахрен. И проставить 301 редирект с index.php на корень:
RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)$ http://site.ru/? [R=301,L]
Как писать название .рф домена в htaccess
Самое важное правило здесь – отказ от кириллицы. Поэтому нужно использовать имя домена в punycode (например, взяв его из Whois).
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.site.ru [NC]
RewriteRule ^(.*)$ http://xn--80aswg.xn--p1ai /$1 [R=301,L]
Боремся с рефспамом с помощью редиректов
Если вас задалбывает реферальный спам, то есть особый код, который с помощью заголовка HTTP_REFERER настраивает 403 код ответа сервера для трафика с сайтов-спамеров.
RewriteCond %{HTTP_REFERER} ref-spam-site.ru [NC,OR]
RewriteCond %{HTTP_REFERER} another-ref-spam.ru [NC]
RewriteRule .* - [F]