Как настроить 301 редирект в htaccess?

301 код ответа сервера (Moved Permanently) означает, что страница или весь сайт перемещены на новый постоянный URL навсегда. Важно настраивать 301 редирект для продвижения сайта, чтобы накопленный ссылочный вес старых страниц передавался новым. Поверить код ответа сервера можно в разных онлайн-сервисах, так один из них bertal.ru.

Для веб-сервера linux Apache настройка 301 ответа сервера происходит в файле .htaccess. А в случае windows веб-сервера IIS — это будет файл web.config.

В популярных CMS, таких как WordPress, Bitrix, Drupal, Modx, Joomla, 301 редирект может настраиватся с помощью специальных плагинов, а также  через htaccess или web config.

Настройка 301 редиректов в файлах htaccess и web.config

Редирект со старой статической (чпу) страницы на новую страницу:

                    
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.seocat\.by$ [NC]
RewriteRule ^baza-znanij-seo/nastrojka-301-redirekta/$ http://www.seocat.by/newpage/ [R=301,L]
                    
                

Стандартная переадресация с одной статической страницы на другую:

                    
Redirect 301 /was.php http://www.seocat.by/new.php
                    
                

Редирект на главную страницу:

                    
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.seocat\.by$ [NC]
RewriteRule ^baza-znanij-seo/nastrojka-301-redirekta/$ http://www.seocat.by/ [R=301,L]                    
                

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

                    
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.seocat\.by$ [NC]
RewriteRule ^$ http://www.seocat.by/baza-znanij-seo/nastrojka-301-redirekta/ [R=301,L]                    
                

Редирект со страниц сайта с WWW на страницы без WWW:

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

Редирект со страниц сайта без WWW на страницы с WWW:

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

Следующий пример позволяет убрать слеш на конце урла.

Редирект 301 со страниц со слешем на конце на страницы без него:

                    
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]                    
                

А здесь добавляем слеш в конец урла:

                    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]                    
                
301 редирект с index.php на главную:
                    
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.seocat.by/ [R=301,L]                    
                
Редирект всех внутренних страниц на главную:
                    
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule !(^$|.*\.(css|jpg|gif)) / [R=301,L]                    
                
Редирект урла с параметром на любую внутреннюю страницу сайта: (Например, со страницы http://www.site.ru/news.php?category=1 на http://www.site.ru/news.php?category=2 (здесь параметр category=)):
                    
RewriteEngine On
RewriteCond %{QUERY_STRING} category=1
RewriteRule ^news.php http://www.seocat.by/news.php?category=2 [R=301,L]                    
                

Редирект урла с параметром на главную страницу сайта: (Например, http://site.ru/index.php?show_section=12 на главную страницу http://site.ru/ (здесь параметр show_section=12)):

                    
RewriteEngine On
RewriteCond %{QUERY_STRING} show_section=12
RewriteRule ^index.php http://site.ru/? [R=301,L]                    
                

Редирект со старого домена на новый (прописываем в htaccess старого сайта):

                    
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.siteold\.ru$ [NC]
RewriteRule ^(.*)$ http://sitenew.ru/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^siteold\.ru$ [NC]
RewriteRule ^(.*)$ http://sitenew.ru/$1 [L,R=301]                    
                
Редирект с домена РФ на домен RU. Здесь важно знать, что РФ зона преобразуется в .xn--p1ai, а само название кириллического домена в соответствующий код (punycode) на латинице xn-….
                    
RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ [NC]
RewriteRule ^(.*)$ http://www.seocat.by/$1 [R=301,L]                    
                

301 редирект каталога:

                    
RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2 [R=301,L]                    
                

На практике бывают случаи, когда есть 2 сайта с одинаковой информацией, но в то же время доступные по разным адресам (сайты дубли). У этих сайтов одинаковый robots.txt, sitemap.xml и один на двоих .htaccess. Предлагаем вариант 301 редиректа с неосновного такого сайта (site2) на основной (site1):

                    
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site2.ru$ [OR,NC]
RewriteCond %{HTTP_HOST} ^www.site2.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://www.site1.ru/$1 [R=301,L]                    
                

Вставка включающая в себе все редиректы со страниц index|default с расширениями htm|html|php|asp|aspx на главную:

                    
RewriteEngine On
RewriteCond %{THE_REQUEST} ^GET\ .*/(index|default)\.(htm|html|php|asp|aspx)\ HTTP
RewriteRule ^(.*)(index|default)\.(htm|html|php|asp|aspx)$ http://www.site.ru/$1 [R=301,L]