301 редирект

301 редирект — постоянный редирект, т.е. 301 редирект указывает на то, что страница перемещена на новый адрес, а старый URL считать устаревшим, такой редирект передает около 90-99% ссылочного веса страницы.

Далее будут описаны несколько советов и примеры 301-го редиректа с помощью файла .htaccess

Советы

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

Старайтесь не делать редирект на страницу ответ которой отличен от кода 200. Т.е. редирект должен переадресовывать на существующую страницу с 200 ответом сервера.

Браузеры кэшируют редиректы, поэтому проверять их лучше с помощью онлайн ресурсов.

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

Используется когда страница переехала с одного URL на другой. Например старый URL страницы /page-1/ необходимо сделать 301 редирект на URL http://mysite.com/new-page-1/

    Redirect 301 /page-1/ http://mysite.ru/new-page-1/

или

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

301 редирект с www на домен без www

301 редирект домена с www на без www так же называется канонизацией домена или склейкой. Например делаем редирект с http://www.mysite.ru на http://mysite.ru, т.о. главное зеркало сайта это http://mysite.ru

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

или

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

301 редирект с домена без www на домен с www

Также как и в случае описанным выше это еще называется канонизацией домена или его склейкой. Например 301 редирект с домена http://mysite.ru на домен http://www.mysite.ru, т.е. главное зеркало это www.mysite.ru

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

b

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

301 редирект со страниц со слешем на страницы без слеша в конце URL

Часто бывает так что одна и та же страница доступна по двум URL, например /may-best-page и /my-best-page/, если человеку понятно что это одна и та же страница, то поисковые системы понимают это как две разные страницы, соответственно разбивают вес страницы, а также показываются в аналитике (статистике) как 2 разные страницы. Для того, что бы избежать этого вы можете сделать 301 редирект со страниц со слешем в конце URL на без него.

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

Такой редирект будет работать следующим образом:

Запрос (URL)Редирект (URL)
http://mysite/page/http://mysite/page
http://mysite/page/?value=1http://mysite/page?value=1
http://mysite/page.html/http://mysite/page.html
http://mysite/page?value=1/http://mysite/page?value=1
http://mysite/pageбез редиректа
http://mysite/page.htmlбез редиректа
http://mysite/page?value=1без редиректа

301 редирект со страниц без слеша на страницы со слешем в конце URL

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

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

Пример работы редиректа:

Запрос (URL)
http://mysite/pagehttp://mysite/page/
http://mysite/page.htmlhttp://mysite/page.html
http://mysite/page?value=1http://mysite/page/?value=1
http://mysite/page/без редиректа
http://mysite/page/?value=1без редиректа

301 редирект со всех страниц одного домена на главную страницу другого домена

К примеру вам необходимо сделать 301 редирект с любого URL текущего сайт (к которому относиться .htaccess) на домен http://mysite.ru

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

301 редирект с каждой страницы одного домена на такой же URL адрес другого домена

Для примера рассмотрим ситуацию когда ваш сайт переехал на новый домен, но у вас есть естественное желание сохранить пользователей переходящих по старым ссылкам и открыть сайт на новом домене с нужной пользователю информацией:

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

301 редирект с протокола http на протокол https

Если у вас на сайте есть SSL сертификат и работает протокол https, то для 301-го редиректа вам необходимо добавить в .htaccess следующий код:

    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

301 редирект с протокола https на http

И обратный пример, если у вас нет SSL сертификата и протокол https не работает:

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

Удаляем несколько слешей подряд в URL и делаем 301 редирект

Если по случайности у вас появились URL такого вида: mysite.ru/page///my-page, то можно сделать 301-й редирект без дублирования слешей:

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

Удаляем подряд несколько тире (дефисов) и делаем 301 редирект

Как в ситуации с повторяющимися слешами в URL может появиться несколько тире или дефисов, для 301-го редиректа с их удалением добавляем код:

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

Вырезать из URL index.php

Пример без GET параметров, например с mysite.ru/index.php на mysite.ru/

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

Пример с GET параметрами, например с mysite.ru/index.php?value=1&p=3 на mysite.ru/?value=1&p=3

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

Несколько примеров совмещения 2-х редиректов в один

Для избежания последовательных редиректов можно использовать совмещенные варианты.

301 редирект с www на без www и со слешем в конце URL

Комбинируем 301 редирект с www на домен без www и 301 редирект со страниц без слеша на страницы со слешем в конце:

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

301 редирект с без www на с www и со слешем в конце URL

Комбинируем 301 редирект с домена без www на домен с www и 301 редирект со страниц без слеша на страницы со слешем в конце URL:

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

301 редирект с без www на с www и без слеша в конце URL

Комбинируем 301 редирект с домена без www на домен с www и 301 редирект со страниц со слешем на страницы без слеша в конце URL:

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

301 редирект с www на без www и без слеша в конце URL

Комбинируем 301 редирект с www на домен без www и 301 редирект со страниц со слешем на страницы без слеша в конце URL:

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

Если у вас Nginx, то примеры 301-го редиректа можно почитать здесь: Nginx, 301 на все случаи жизни.

От ltvjybn14

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.