301 редирект — Переезд, склейка дублей, www и без, http в https

Share

Одна из самых распространенных задач в сайтостроении и особенно в SEO является правильная настройка редиректов. 301 редирект является основным и единственным перенаправлением, которое используется при склейке дублей различных страниц, при переезде на новое доменное имя и при переходе на https.

Основые способы реализации 301 редиректа

1. Средствами PHP

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://site.com/new.html");
exit();

2. Через .htaccess

Redirect 301 /old.html http://site.com/new.html

3. В конфигах Nginx

server {
    if ( $request_filename ~ old/ ) {
        rewrite ^ http://site.com/new.html permanent;
    }
}

Далее рассмотрим часто-используемые редиректы через .htaccess. В случае необходимости их несложно перевести на PHP, Nginx либо другой web-сервер.

Переезд на новый домен

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

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

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

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

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

Удаление слеша в конце адреса

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

Добавление слеша в конец адреса

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

Редирект с http на https

1-ый способ

RewriteCond %{HTTPS} =off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

2-ой способ

RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

3-ий способ

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

4-ый способ

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

5-ый способ

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

6-ой способ

RewriteCond %{HTTP:SSL} !1
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

На этом все, более подробные редиректы необходимые для SEO разберем в отдельной статье. Остались вопросы или дополнения — пишите в комментариях.

Может быть интересно