Как сделать 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 ошибку.

This site is using cookie files, Google Analytics system to collect statistics about website visitors and also collects data like your IP and geolocation. More in our policy.
By continuing to use current website you are automatically agreed with using described technologies.