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

Каждый уважающий себя вебмастер знает о необходимости перевода сайта на https. Поисковые системы в открытую говорят, что повышают в поисковой выдаче защищённые сайты, поскольку к ним больше доверия. Также практически все современные браузеры выдают предупреждения пользователю, если он вводит какие-то данные на сайте без ssl. Как этого избежать? Ответ один: перевести свой сайт на https. Если соединение между вашим сайтом и его посетителями не защищено, будьте уверены, что вы теряете свою потенциальную аудиторию.
Если ваш сайт уже на https, то часто возникает вопрос, как сделать переадресацию с http на https? Предлагаю следующие надёжные способы.
Редирект с http на https средствами nginx
Если у вас VPS или выделенный сервер, то целесообразно это делать с помощью nginx. Потребуется доступ к файлам конфигурации nginx, например, nginx.conf. Внесите в него следующий код (не забудьте заменить example.com на свой сайт):
server {
listen *:80;
server_name example.com;
proxy_set_header Host example.com;
location / {
rewrite ^(.*)$ https://example.com$1 permanent;
}
}
server {
listen *:443 ssl;
server_name example.com;
proxy_set_header Host example.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
После сохранения файла конфигурации выполните проверку корректности внесённых изменений:
nginx -t
Если ошибок нет, то выполните команду рестарта nginx. Для Centos она следующая:
service nginx restart
Редирект с http на https средствами .htaccess
Если у вас виртуальный хостинг или вы опасаетесь лишний раз менять конфигурацию вебсервера, то вы в любой момент можете настроить редирект в файле .htaccess. Обычно он находится к корневой папке вашего сайта. Скопируйте его себе на компьютер, сделайте копию на всякий случай и откройте для редактирования в обычном текстовом редакторе, например, блокноте.
В отличие от конфига nginx, где даже один ошибочный символ может к привести к остановке сервера после перезапуска, неточности конфига в файле .htaccess для редиректа с http на https в большинстве случаев не создадут вам особых проблем, и не нужно перезагружать службу nginx или вебсервер. Предлагаю вашему вниманию несколько вариантов переадресаций, каждый из которых занимает 2-3 строчки в файле .htaccess. Если внесённый вами вариант конфигурации не сработает и страница вашего сайта в браузере с http вдруг не перенаправится на https, то попробуйте использовать другой вариант.
Варианты редиректа с http на https средствами .htaccess:
Первое что вы должны сделать, это включить RewriteEngine, для этого напишите вверху файла .htaccess следующий код, если его там ещё нет:
RewriteEngine On
Далее пробуйте варианты, начиная с первого, который срабатывает в большинстве случаев.
Вариант 1
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Вариант 2
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
Обратите внимание, второй вариант не совсем надёжен и в редких случаях вызывает циклический переход между страницей http и её копией на https. Если это произошло или вам не помогли первые два варианта, пробуйте способы ниже.
Вариант 3
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Вариант 4
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Вариант 5
RewriteCond %{HTTP:X-Forwarded-Protocol} !=https
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Вариант 6
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Вариант 7
RewriteCond %{HTTP:Front-End-Https} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Если нужен вариант, когда должен быть редирект c http на https только одной страницы (не забудьте поменять адрес страницы), используйте код:
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} =/login.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
Если нужен вариант, когда должен быть редирект c http на https всех страниц, кроме одной (не забудьте поменять адрес страницы), используйте код:
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} =/login.php
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
И совет напоследок. Если вы не сделали автоматический переход с http на https, поисковые системы будут считать, что у вас два сайта, особенно, если для обычной и для защищённой копии только один вариант robots.txt. Если вы по каким-то причинам не хотите делать переадресацию с http на https всех страниц или сделали это выборочно, обязательно разберитесь с тем, что у вас в robots.txt, либо сделайте его доступным только для одной, например, защищённой версии сайта.
0 комментариев