С одной страницы на другую
Самый частый случай — это именно редирект с одной страницы на другую. Редиректы с без 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]