Довольно часто бывает, что на сайте меняются URL адреса. Для того, чтобы не потерять позиции текущих страниц в поисковой выдаче, необходимо сообщить поисковой системе о том, что произошло изменение URL. Сделать это можно с помощью 301 редиректа.

301 первый редирект

1 вариант

Redirect 301 /test-1/ http://site.ru/test-2/

2 вариант

RewriteCond %{REQUEST_URI} ^/test/$
RewriteRule ^.*$ http://site.ru/new-test/? [R=301,L]

301 редирект с www на без www (главное зеркало – домен без www)

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

301 редирект с без www на www (главное зеркало – домен с www)

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

301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами (вырезать в url index.php)

RewriteCond %{REQUEST_URI} /index.php
RewriteRule ^(.*)$ http://site.ru/ [R=301,L]

Со страниц со слешем на конце на страницу без слеша на конце

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]

Со страниц без слеша на конце на страницу со слешем на конце

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]