Как сделать 301 редирект с http на https

После подключения SSL-сертификата для сайта, в некоторых случаях необходимо сделать редирект, чтобы все страницы с протокола http, выполняли редирект на защищенный протокол https. Это можно сделать средствами .htaccess, либо же средствами web-сервера nginx, более детально как это сделать, рассказано ниже.

301 редирект с http на https с помощью .htaccess

301 редирект для всех страниц сайта

Первый вариант:

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

Второй вариант:

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

В случае, если первые два варианта не помогли с решением задачи, то стоит попробовать третий вариант:

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

301 редирект на https, только конкретной страницы

RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} =/payments.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

Или:

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

Обратный вариант, 301 редирект всех страниц, кроме одной

RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} !^/test-page.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

301 редирект с http на https средствами nginx

301 редирект для всего сайта

Если в конфиге nginx указаны две директивы для одного домена, одна для http, вторая для https. Правило прописывается в директиве server для http:

server {
…
return 301 https://$server_name$request_uri;
...
}

Если же в конфигурационном файле nginx, одна директива server, то нужно указать такой блок:

if ($ssl_protocol = "") {
rewrite ^ https://$server_name$request_uri? permanent;
}

301 редирект на https, только конкретной страницы

location /payments.php {
rewrite ^(.*)$ https://$http_host$request_uri redirect;
}

301 редирект всех страниц, кроме одной

location = /test-page.php {
}

location / {
rewrite ^(.*)$ https://$http_host$request_uri redirect;
}

Примечание:
После добавления редиректа средством nginx, нужно проверить конфигурация командой:

nginx -t

И если ошибок не обнаружено, то выполнить команду для перезапуска web-сервера:

service nginx restart 

или же просто перезагрузить конфигурационный файл командой:

service nginx reload

301 редирект с http на https добавленный в файл .htaccess, начинают работать сразу после добавления, поэтому нужно быть внимательным чтобы не допускать ошибок, в противном случае, можно получить 500 ошибку.

    Данный сайт использует cookie-файлы, систему Google Analytics для сбора детальной статистики о посетителях веб-сайта, а также собирает данные об IP-адресе и Вашем местоположении. Подробнее в нашей политике.
    Продолжая использовать данный ресурс, Вы автоматически соглашаетесь с использованием данных технологий.