Раздел помощи SpaceWeb

Редирект с HTTP на HTTPS для Linux

13 май, 2024

Зачем нужно настраивать перенаправление с HTTP на HTTPS

Настройка перенаправления сайта с HTTP на HTTPS имеет несколько важных причин и преимуществ, которые существенно влияют на безопасность, надёжность и восприятие вашего сайта пользователями и поисковыми системами:

  1. Улучшение безопасности. HTTPS шифрует передаваемые данные между пользовательским браузером и сервером. Таким образом, злоумышленникам становится сложно перехватить или изменить данные в процессе их передачи. 
  2. Преимущества для SEO-оптимизации. Google, Яндекс и другие поисковые системы предпочитают сайты, которые используют HTTPS, считая их более надёжными. Переход на HTTPS может помочь улучшить позиции сайта в поисковой выдаче, что приведёт к увеличению органического трафика.
  3. Соответствие стандартам. В некоторых отраслях, особенно в сферах, где требуются строгие меры по защите данных (например, финансовая индустрия или здравоохранение), использование HTTPS считается критически важным.
  4. Уменьшение риска «man-in-the-middle» атак. Перенаправление на HTTPS помогает предотвратить атаки, при которых злоумышленник может вставлять свой контент в страницу, перехватывать данные или проводить другие манипуляции с трафиком.

В целом, переадресация с HTTP на HTTPS – это на данный момент лучшая практика для всех сайтов в интернете, так как оно обеспечивает улучшенную безопасность, лучшее SEO и повышенное доверие пользователей.

Как настроить редирект с HTTP на HTTPS 

Итак, мы разобрались, что для улучшения безопасности сайта и защиты данных пользователей настройка перенаправления с HTTP на HTTPS – это крайне важная задача. 

Чтобы её выполнить, можно использовать различные методы, о которых мы и расскажем далее. 

Настройка редиректа с помощью виртуального хоста

Apache Virtual Hosts представляет собой мощный инструмент для управления множеством сайтов с одного сервера, позволяя определить индивидуальные настройки для каждого из них. В настройках виртуального хоста можно задать корневую директорию сайта, разработать индивидуальные политики безопасности для каждого сайта, установить различные SSL сертификаты, настроить редиректы и многое другое.

При установке SSL сертификата обычно создаются две директивы виртуального хоста для каждого домена: одна для обслуживания HTTP на порту 80 и вторая для HTTPS на порту 443.

Настройки виртуальных хостов для систем на базе Red-Hat (например, CentOS и Fedora) находятся в каталоге /etc/httpd/conf.d

Для Debian и его производных, таких как Ubuntu, эти настройки расположены в /etc/apache2/sites-available.

Пример перенаправления сайта на HTTPS через директиву Redirect выглядит следующим образом:
 

<VirtualHost *:80> 
  ServerName domain.ru
  ServerAlias www.domain.ru
  Redirect permanent / https://domain.ru/
</VirtualHost>
<VirtualHost *:443>
  ServerName domain.ru
  ServerAlias www.domain.ru
  Protocols h2 http:/1.1
  # SSL Configuration
  # Other Apache Configuration
</VirtualHost>

Этот код демонстрирует использование двух директив виртуального хоста: одной для HTTP и другой для HTTPS. 

  • Директивы ServerName и ServerAlias указывают доменные имена. 
  • Команда Redirect permanent / https://domain.ru/ в виртуальном хосте для HTTP осуществляет перенаправление трафика на HTTPS версию сайта.

Для дополнительного перенаправления www-версии сайта на не-www (или наоборот) можно использовать следующее условие в конфигурации HTTPS:

<VirtualHost *:443> 
ServerName domain.ru 
ServerAlias www.domain.ru 
Protocols h2 http:/1.1 
<If "%{HTTP_HOST} == 'www.domain.ru'"> 
Redirect permanent / https://domain.ru/ </If> 
# SSL Configuration 
# Other Apache Configuration 
</VirtualHost> 

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

Команда для Debian и Ubuntu

sudo systemctl reload apache2 

Команда для CentOS и Fedora

sudo systemctl reload httpd 

Эти команды перезагрузят Apache, активируя внесённые изменения в конфигурации. Это критически важно для обеспечения того, чтобы новые настройки применились, не нарушив работу сервера.

Настройка редиректа в ispmanager 

  1. Зайдите в панель управления ispmanager и перейдите к разделу «Сайты».

  1. Выберите нужный домен для переадресации на HTTPS и дважды кликните по нему.
  2. Раскройте раздел Дополнительные настройки.
  3. Активируйте опцию Перенаправлять HTTP-запросы в HTTPS, установив галочку.

  1. Подтвердите изменения, нажав Сохранить.

Теперь ваш сайт будет доступен через безопасный протокол HTTPS.

Настройка редиректа в cPanel 

  1. Войдите в панель управления вашего хостинга. 
  2. Откройте файл .htaccess, который находится в корневом каталоге вашего сайта. 

Если файл не отображается, это может быть связано с тем, что в cPanel скрытые файлы не показываются. 

В cPanel файл .htaccess действительно не отображается по умолчанию. Чтобы начать его редактирование, вам нужно сделать видимыми скрытые файлы. 

  1. Перейдите в раздел «Файлы».
  2. Откройте «Менеджер файлов». 
  3. Кликните по кнопке Настройки
  4. Активируйте опцию Показать скрытые файлы (dotfiles), после чего сохраните настройки.
  5. Во вкладке «Домены» перейдите к разделу «Дополнительные домены».
  6. Кликните на строке с корневой папкой домена, затем правой кнопкой мыши кликните на файл .htaccess и выберите Редактировать из контекстного меню.
  7. Добавьте в конец файла .htaccess одно из правил, которые мы описали ниже, после инструкции для Plesk. 

Настройка редиректа в Plesk

  1. Войдите в панель управления вашего хостинга. 
  2. Откройте файл .htaccess, который находится в корневом каталоге вашего сайта.
  3. Выберите нужный домен и кликните на строку, указывающую корневую папку домена. 

Так вы сможете открыть корневую папку вашего сайта. 

  1. В этом списке найдите файл .htaccess и нажмите на него левой кнопкой мыши.
  2. Затем в конец файла .htaccess добавьте правило, которое соответствует вашим требованиям:

Перенаправление всех страниц с HTTP на HTTPS

Это правило поможет перенаправить все страницы с http:// на https://. К нему также относятся переходы с http://www на https://. 

Способ 1:

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

Способ 2. Используйте следующий способ, если первый не сработает:

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

Способ 3. Если проблемы сохраняются и происходит циклическая переадресация, попробуйте добавить следующие строки:

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

или:

RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Перенаправление на HTTPS только выбранной страницы

В качестве примера рассмотрим страницу register.php. Настройка 301 переадресации для неё может быть выполнена следующими способами:

Способ 1:

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

Где:

  • RewriteEngine On активирует модуль mod_rewrite, который позволяет переписывать URL.
  • RewriteCond %{HTTPS} off проверяет, что соединение не защищено.
  • RewriteCond %{REQUEST_URI} ^/register.php специфицирует страницу, для которой нужен HTTPS. Замените /register.php на путь к нужной странице.
  • RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] перенаправляет пользователя на HTTPS версию страницы. Флаг R=301 означает постоянное перенаправление, L останавливает обработку правил после текущего набора.

Способ 2:

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

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

RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} !^/register.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

  • RewriteEngine On активирует модуль переписывания URL.
  • Первое условие RewriteCond %{HTTPS} off проверяет, что текущее соединение не защищено (не использует HTTPS).
  • Второе условие RewriteCond %{REQUEST_URI} !^/register.php исключает страницу, которую вы не хотите перенаправлять на HTTPS. Здесь /register.php – это URI страницы, которую нужно исключить. Замените этот URI на тот, который требуется в вашем случае.
  • RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] – это правило перенаправляет все остальные запросы на HTTPS. Флаг R=301 указывает на постоянное перенаправление, а L – последнее правило, которое должно быть обработано в текущем наборе.

Сохраните внесённые изменения. 

Теперь ваш сайт будет функционировать через защищённый протокол HTTPS.

Настройка редиректа на HTTPS с помощью .htaccess

Вы также можете использовать файл .htaccess для принудительного использования HTTPS-соединения. В этом разделе мы покажем вам, как это сделать.

Файл .htaccess — это конфигурационный файл для веб-серверов Apache. Он используется для управления настройками сервера на уровне отдельной директории, что позволяет вносить изменения без необходимости изменять основной конфигурационный файл. 

Этот файл позволяет активировать или деактивировать определенные функции Apache для конкретного каталога.

Файлы .htaccess обычно размещаются в корневом каталоге домена, хотя их можно находить и в других подкаталогах. Для работы с этими файлами необходимо, чтобы на сервере был активирован модуль mod_rewrite. Как правило, он включён по умолчанию на большинстве серверов Apache. Однако, если это возможно, рекомендуется использовать перенаправление на уровне виртуального хоста, так как это более простой и безопасный метод.

  1. Чтобы перенаправить весь HTTP-трафик на HTTPS, откройте корневой .htaccess файл и добавьте следующие строки:
RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://domain.ru/$1 [L,R=301] 

Где:

  • RewriteEngine On активирует функционал перезаписи URL.
  • RewriteCond %{HTTPS} off проверяет, используется ли нешифрованное соединение, и, если это так, применяется следующее правило.
  • RewriteRule ^(.*)$ https://domain.ru/$1 [L,R=301] перенаправляет все запросы с HTTP на HTTPS с использованием кода состояния 301, который указывает на постоянное перенаправление. Вам нужно заменить domain.ru на ваш фактический домен.
  1. Если необходимо принудительно использовать версию сайта без «www» через HTTPS, добавьте следующее условие:
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC] 
RewriteRule ^(.*)$ https://domain.ru/$1 [L,R=301] 

При работе с файлом .htaccess не требуется перезапускать сервер, так как Apache перечитывает этот файл при каждом новом запросе.