Перенаправление HTTP на HTTPS

В дополнение к каноникализации www, вы также можете каноникализировать протокол HTTP, перенаправляя HTTP на HTTPS (или наоборот) с помощью Apache/.htaccess. Ниже вы найдете несколько способов принудительного SSL/TLS для всех URI запросов. Это особенно полезно для сайтов с существующими ссылками, указывающими на незашифрованные http://. URLs. Принудительное использование SSL/HTTPS помогает устранить дублирование контента и сохранить ценные ссылки на канонический набор страниц.

Требования

Во-первых, вам необходимо иметь SSL сертификат, установленный на вашем сервере Apache. Методы, описанные в этом руководстве, предполагают, что SSL работает правильно. Если вы сомневаетесь в этом, обратитесь за помощью к своему хостеру. Затем, когда SSL настроен, вы можете использовать любую из следующих техник, чтобы убедиться, что все запросы обслуживаются по протоколу HTTPS протокол (или HTTP если вам так удобнее).

Кроме того, вам понадобится доступ к публичному корневому файлу .htaccess вашего сайта (или вы можете использовать файл конфигурации Apache), чтобы добавить необходимые правила Apache/.htaccess.

Возможно, также будет полезно перевести сайт в режим обслуживания, если это необходимо, на время внесения изменений в .htaccess. Таким образом, поисковые системы не заметят никаких прерывистых или неожиданных сценариев.

Напоминание: Всегда делайте резервную копию файла .htaccess перед внесением любых изменений!

Перенаправление HTTP на HTTPS (или наоборот) в .htaccess

Ниже вы найдете четыре метода перенаправления всех запросов на HTTPS протокол. Первая техника может быть использована для тестирования, чтобы дать вам представление о том, как ваш сервер в настоящее время обрабатывает URI запросов.

После тестирования вы можете использовать любую из трех других техник, чтобы убедиться, что все запросы всегда обслуживаются через SSL/HTTPS (или обычный HTTP, если хотите). Все три метода перенаправления достигают одной и той же цели, поэтому используйте тот из них, который лучше всего подходит для вашей конфигурации сайта.

Метод 1: Проверьте, включен ли HTTPS

Первое, что необходимо сделать, это проверить, включен ли HTTPS на вашем сервере Apache. Это можно сделать, добавив следующий код в корневой файл .htaccess вашего сайта:

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{HTTPS} ^on$ [NC]
	RewriteCond %{QUERY_STRING} !https-is-on [NC]
	RewriteRule (.*) /?https-is-on [R=301,L]
</IfModule>

Эта техника проверяет, включен ли HTTPS на вашем сервере. Если да, то она перенаправит запрос на вашу домашнюю страницу с добавлением строки запроса https-is-on. Вы можете выполнить обратный тест, изменив on на off. После тестирования с этим кодом удалите его и выберите один из следующих трех методов для обеспечения SSL для всех запросов.

Метод 2: Перенаправить все запросы на HTTP или HTTPS

Этот метод SSL-перенаправления я использую для своих сайтов, работающих на Apache. Он максимально прост и просто работает. Он также хорош тем, что не требует никаких изменений: вы можете просто вставить его в любой сайт, работающий на Apache, и все готово.

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{HTTPS} off
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

Как это работает? Вот построчное описание:

  • Проверьте, доступен ли модуль перезаписи Apache.
  • Если да, то убедитесь, что модуль перезаписи включен.
  • Проверьте, выключен ли HTTPS (SSL) для запроса.
  • Если да, то запрос перенаправляется на HTTPS
  • Закройте проверку модуля перезаписи

Примечание: чтобы изменить эту технику для перенаправления с HTTPS на HTTP, измените RewriteCond на on и замените https на http в RewriteRule. Также, если HTTP_HOST работает не так, как ожидалось, попробуйте использовать SERVER_NAME вместо него.

Метод 3: Перенаправьте все на HTTP или HTTPS

Этот метод аналогичен методу №2, только здесь мы жестко кодируем протокол перенаправления и имя домена для большего контроля и настройки. Поэтому если предыдущий метод по каким-либо причинам не работает на вашем сервере, попробуйте этот.

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{HTTPS} off
	RewriteRule (.*) https://example.com/$1 [R=301,L]
</IfModule>

Этот код работает так же, как и в методе №2. Единственное различие заключается в том, что здесь направление перенаправления прописано в явном виде. Поэтому вы можете заменить example.com на свой собственный домен, и/или включить префикс www, если хотите. В этом случае вы захотите использовать этот код:

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{HTTPS} off [OR]
	RewriteCond %{HTTP_HOST} !^www.
	RewriteRule (.*) https://www.example.com/$1 [R=301,L]
</IfModule>

Обратите внимание на разницу между этой и предыдущей техникой. Здесь мы добавляем еще одно условие перезаписи, которое проверяет запрос на наличие префикса www. Если запрос не содержит префикса, или если HTTPS «выключен», запрос перенаправляется на каноническую версию URL. Это гарантирует, что все запросы обслуживаются через SSL/HTTPS, а также что префикс www (т.е. субдомен) всегда включен в URI запроса.

Примечание: чтобы изменить этот метод для перенаправления с HTTPS на HTTP, измените RewriteCond на on и замените https на http в RewriteRule.

Метод 4: Перенаправить все на HTTP или HTTPS

Этот альтернативный метод использует порт сервера для проверки SSL/HTTPS. Если запрос относится к порту SSL, он перенаправляется на протокол HTTPS.

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{SERVER_PORT} ^443$
	RewriteRule (.*) https://example.com/$1 [R=301,L]
</IfModule>

Как написано, этот код проверяет, является ли запрос на порт сервера 443, который обычно используется для зашифрованных соединений. Ваш сервер может использовать или не использовать порт 443, поэтому спросите у своего хостера, если не уверены.

К сведению: вот альтернативная логика для RewriteRule:

RewriteRule (.*) https://example.com%{REQUEST_URI} [R=301,L]

Примечание: отредактируйте example.com, чтобы он соответствовал вашему собственному домену. Чтобы изменить эту технику для перенаправления HTTPS на HTTP, измените порт сервера с 443 (https) на порт сервера http по умолчанию (обычно 80), и замените https на http в RewriteRule.

Примечания

Обратите внимание, что каждый сервер настроен по-своему, и перенаправление HTTPS на HTTP (или наоборот) — это одна из тех задач, которая кажется простой, но на самом деле требует либо доступа к файлу конфигурации Apache, либо проб и ошибок с использованием различных методов .htaccess. Другими словами, насколько я знаю, не существует универсального решения .htaccess для перенаправления HTTP на HTTPS. Тем не менее, существует множество методов, которые, похоже, работают в зависимости от конфигурации сервера.

Также: если ни один из фрагментов кода не работает при размещении в корневом файле .htaccess, содержащемся в каталоге /http/ (или подобном), попробуйте разместить их в корневом файле .htaccess, содержащемся в каталоге /https/ (если он существует, опять же все зависит от конфигурации сервера). Никогда не стесняйтесь обращаться за помощью к вашему хостеру, если/когда это необходимо.

Оцените статью
devanswers.ru
Добавить комментарий