1) С www иди без www, т.е. www.site.ru и site.ru — разные, в этой ситуации также потребуется указание главного зеркала, но об этом расскажу в другой статье.
2) С слешом на конце (/) и без него, т.е. site.ru/product/ и site.ru/product соответственно.
3) Буквы адреса в разном регистре бывает и такое), т.е. site.ru/PrOdUct
Редирект с www на без www
RewriteCond %{HTTP_HOST} ^www.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Редирект с домена без www на домен с www
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
301 редирект страниц со слэшем и без
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
Если надо наоборот оставить слэш в конце урла, то
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
Если появились урлы типа site.ru/category//article.html, то
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
где, «//» можно заменить на «—» или любые сдвоенные символы в урле.
Редирект на нижний регистр на уровне php-скрипта
if($_SERVER[‘REQUEST_URI’] != strtolower($_SERVER[‘REQUEST_URI’]))
{ header(‘Location: http://’.$_SERVER[‘HTTP_HOST’].strtolower($_SERVER[‘REQUEST_URI’]), true, 301); exit(); }