Справочник

Переадресация с HTTP на HTTPS через .htaccess

Сначала проверьте, нет ли переключателя переадресации в панели хостинга: с ним строки писать не нужно. Если его нет, добавьте в начало .htaccess три строки — условие в них зависит от хостинга. Сертификат на сайте к этому моменту уже должен работать.

≈ 7 мин чтения
Содержание 9

Что сделать прямо сейчас

  1. Откройте сайт по адресу с https://. Если браузер показывает предупреждение о сертификате, сначала поставьте сертификат — как это сделать.
  2. Поищите переключатель в панели хостинга — где он у Timeweb, Beget и Рег.ру. Если он есть, включите его, а правило в .htaccess не добавляйте.
  3. Если переключателя нет, сохраните копию .htaccess и добавьте в самое начало файла правило для своего хостинга — готовые правила.
  4. Проверьте переадресацию — как проверить.
  5. Если браузер пишет о слишком большом числе переадресаций, уберите правило и посмотрите разбор ошибки.

Сначала сертификат

Переадресация на https:// имеет смысл, только когда сертификат уже выпущен. У Timeweb это ещё и условие выпуска: пока на домене есть переадресации — в панели или в .htaccess, — сертификат может не выпуститься. Поэтому порядок такой: сертификат, проверка адреса с https://, потом переадресация.

Перед включением Beget советует убрать из .htaccess переадресации на http://, отключить плагины переадресации в CMS и поменять адрес сайта в настройках CMS на https://.

Переключатель в панели хостинга

ХостингГде включить
Timewebраздел «Сайты» → кнопка в виде шестерёнки у сайта → «Перенаправлять на HTTPS»
Begetраздел «Сайты» → иконка у сайта → опция «Редирект с HTTP на HTTPS». Начинает работать в течение пяти минут, отвечает кодом 301 и действует на все файлы сайта
Рег.ру, панель ispmanager«Сайты» → двойной щелчок по домену → галочка «Перенаправлять HTTP-запросы в HTTPS» → ОК
Рег.ру, панели cPanel и Pleskпо справке Рег.ру — правило в .htaccess в корневой папке сайта

Одного способа достаточно: если переключатель включён, правило в .htaccess не нужно.

Правило для вашего хостинга

Правило ставят в самое начало .htaccess, до остальных строк. Первая и последняя строки везде одинаковые, а условие — строка RewriteCond — у каждого хостинга своё. Почему так, рассказано ниже.

Timeweb

RewriteEngine On
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Beget

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Beget предупреждает: правила в .htaccess действуют только на страницы, которые создаёт сайт, например на PHP. Картинки, стили и другие файлы отдаются мимо них. Чтобы на HTTPS переходили все адреса, включите переключатель в панели.

Спринтхост

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Спринтхост советует ставить это правило как можно выше в файле.

Рег.ру

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

Второй вариант от Рег.ру — строка RewriteCond %{HTTPS} =off вместо строки с портом. Если с любым из них браузер пишет о слишком большом числе переадресаций, замените условие двумя строками — Рег.ру советует их на этот случай:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https

Если не подошёл ни один вариант, Рег.ру советует обратиться к разработчикам сайта: в некоторых случаях переадресацию можно настроить только средствами CMS.

Свой VPS с Apache

На своём сервере переадресацию проще задать в файле настроек сайта — документация Apache советует именно этот способ. Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Откройте файл сайта:

sudo nano /etc/apache2/sites-available/example.com.conf

Вместо example.com.conf — файл вашего сайта: список покажет ls /etc/apache2/sites-enabled/. Внутри блока <VirtualHost *:80> добавьте строку:

    Redirect permanent / https://example.com/

Сохраните файл — Ctrl+O, Enter, затем Ctrl+X — и проверьте настройки: sudo apache2ctl configtest. В конце ответа должно быть Syntax OK. Тогда примените их: sudo systemctl restart apache2.

Строку добавляйте только в блок для порта 80. Блок <VirtualHost *:443> — он может лежать и в отдельном файле — должен показывать сайт, иначе переадресация пойдёт по кругу.

Если нужно именно правило в .htaccess, на своём сервере условие такое:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Для него в Apache должен быть включён mod_rewrite, а .htaccess — разрешён: как это сделать. Условия с X-Forwarded-Proto и X-HTTPS на своём сервере не подходят: эти заголовки добавляет сервер хостинга. Без него условие выполняется и на https://, и переадресация идёт по кругу.

Почему условия разные

На хостинге соединение по HTTPS может принимать не Apache, а сервер перед ним. Он расшифровывает запрос и передаёт его Apache уже без шифрования. Apache видит такой запрос как незашифрованный: переменная HTTPS равна off даже на https://, и условие %{HTTPS} !=on отправило бы посетителя по кругу.

Поэтому Timeweb, Beget и Спринтхост проверяют заголовок, в котором сервер перед Apache сообщает, что запрос пришёл по HTTPS: у Timeweb это X-HTTPS, у Beget и Спринтхоста — X-Forwarded-Proto. Правило с чужим условием может не сработать или зациклиться — берите строку своего хостинга.

Как проверить

Откройте сайт в окне инкогнито по адресу с http:// — адрес должен смениться на https://. Точнее покажет команда в терминале компьютера (как открыть терминал, про curl):

curl -I http://example.com/

В первой строке ответа должно стоять число 301 — так отвечают правила из этой статьи, — а в строке Location — адрес с https://. Проверьте и внутреннюю страницу, например curl -I http://example.com/contacts/: в Location должна быть та же страница на https://.

Браузер запоминает ответ 301 и может переходить по старой переадресации, даже когда правило уже исправлено, — поэтому проверяйте через curl или в окне инкогнито.

Ошибки и как их исправить

Что видитеЧто делать
ERR_TOO_MANY_REDIRECTS после добавления правилаусловие не подходит хостингу: возьмите строку своего хостинга или включите переключатель в панели — разбор ошибки
ошибка 500 после сохраненияна VPS не включён mod_rewrite: sudo a2enmod rewrite и перезапуск; на хостинге проверьте опечатки — разбор
правило не действуетперенесите его в начало файла; на VPS разрешите .htaccess — как
на Beget картинки и стили открываются по http://правила в .htaccess их не касаются — включите переключатель в панели
на https:// браузер предупреждает о сертификатесертификат не выпущен или выпущен не на это имя — Бесплатный SSL-сертификат

Источники

Сверено 14 октября 2026 года.

Что почитать дальше