Редиректы .htaccess

Редирект с одного домена на другой

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

Редирект с одной страницы на другую

Redirect 301 /page1/ http://site.ru/page2/

Редирект страниц со слешем на страницы без слеша с исключением для админки сайта

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

Если это не сработало — попробуйте php-код

<?php
if (substr($_SERVER['REQUEST_URI'], -1) != '/') {
    header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'/', true, 301);
}
?>

И наоборот — со слешем на без слеша

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]
<?php
if (substr($_SERVER['REQUEST_URI'], -1) == '/') {
    header('Location: http://'.$_SERVER['HTTP_HOST'].substr($_SERVER['REQUEST_URI'], 0, -1), true, 301);
}
?>

Редирект на https

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=30Rj

Если в URL лишние слеши, используйте

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

Редирект с index.php для всех страниц сайта

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

На некоторых движках данное решение не работает, поэтому если вам не помогло, попробуйте

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php
RewriteRule ^index\.php$ / [L,R=301]

или

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]

Редирект с www на без www

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

И наоборот

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