301 редирект с www

Существует несколько правильных вариантов 301 редиректа в htaccess, и какой из них вы выберете не имеет никакого значения.
Первый самый простой и понятный вариант редиректа с www:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
</IfModule> 

 



Второй вариант редиректа с www:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule> 

 



Третий с условием от противного вариант редиректа с www:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} !^site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
</IfModule>

 



 

301 редирект на www

Как и в редиректе с www, для редиректа на www есть несколько правильных способов, выбирайте который по душе.
Первый вариант редиректа на www:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
</IfModule> 

 




Второй вариант вариант редиректа на www с условием от противного:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
</IfModule>

 

 Третий вариант

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

Посложнее: проверяем, что имя хоста не пустое и не начинается на www.. Добавляем www. к имени хоста и выполняем редирект.