Переадресация с HTTP на HTTPS через .htaccess
Сначала проверьте, нет ли переключателя переадресации в панели хостинга: с ним строки писать не нужно. Если его нет, добавьте в начало .htaccess три строки — условие в них зависит от хостинга. Сертификат на сайте к этому моменту уже должен работать.
Содержание 9
Что сделать прямо сейчас
- Откройте сайт по адресу с https://. Если браузер показывает предупреждение о сертификате, сначала поставьте сертификат — как это сделать.
- Поищите переключатель в панели хостинга — где он у Timeweb, Beget и Рег.ру. Если он есть, включите его, а правило в .htaccess не добавляйте.
- Если переключателя нет, сохраните копию .htaccess и добавьте в самое начало файла правило для своего хостинга — готовые правила.
- Проверьте переадресацию — как проверить.
- Если браузер пишет о слишком большом числе переадресаций, уберите правило и посмотрите разбор ошибки.
Сначала сертификат
Переадресация на 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-сертификат |
Источники
- Документация Apache: переадресация на HTTPS — строка Redirect в блоке VirtualHost для порта 80; за балансировщиком или сервером, который принимает HTTPS, переменная HTTPS равна off — проверяют заголовок X-Forwarded-Proto.
- Документация Apache: RewriteCond — переменные HTTPS (on или off), HTTP_HOST и REQUEST_URI, заголовки запроса через %{HTTP:имя}, флаги NC и OR, ссылки %1 на скобки условия.
- Документация Apache: mod_rewrite в .htaccess — нужны AllowOverride FileInfo и FollowSymLinks; путь без косой черты в начале; RewriteBase; петли и флаг END; RewriteOptions Inherit; кэш браузера для 301.
- Timeweb: заказ, установка и продление SSL-сертификата — переключатель «Перенаправлять на HTTPS»; для выпуска сертификата на домене не должно быть переадресаций.
- Timeweb: типовые перенаправления — условие %{HTTP:X-HTTPS} !1.
- Beget: SSL-сертификат на сайт — опция «Редирект с HTTP на HTTPS», правило с X-Forwarded-Proto в начало .htaccess, правила в .htaccess — только для страниц сайта.
- Рег.ру: редирект с HTTP на HTTPS — галочка в ispmanager, условия с портом 443 и %{HTTPS}, вариант на случай переадресации по кругу.
- Спринтхост: файл .htaccess — правило с X-Forwarded-Proto — как можно выше в файле.
Сверено 14 октября 2026 года.
Что почитать дальше
- Файл .htaccessчто это, как создать и не сломать сайт.
- Переадресация с www на адрес без wwwи как сделать одну переадресацию вместо двух.
- Бесплатный SSL-сертификаткак включить у хостера и на VPS.
- ERR_TOO_MANY_REDIRECTSпереадресация по кругу.
- 301 Moved Permanentlyчто значит код 301.