После подключения 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 ошибку.