HTTPS перенаправление cPanel

Материал из wiki.p3.ru

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

Руководство по перенаправлению HTTP на HTTPS для обеспечения безопасного соединения со всеми посетителями сайта.

Зачем нужен редирект на HTTPS

Преимущества HTTPS

  • Безопасность - шифрование данных между браузером и сервером
  • SEO преимущества - Google повышает рейтинг HTTPS сайтов
  • Доверие пользователей - зеленый замочек в браузере
  • Современные API - многие требуют HTTPS (geolocation, camera и др.)
  • HTTP/2 и HTTP/3 - работают только через HTTPS
  • Отсутствие предупреждений - браузеры помечают HTTP как "Небезопасно"

Шаблон:Важно

Проверка SSL перед настройкой

Шаг 1: Убедитесь что SSL установлен

  1. Откройте ваш сайт с HTTPS: https://example.com
  2. Проверьте наличие замочка в адресной строке
  3. Нажмите на замочек → Certificate is valid
  4. Убедитесь что дата действия не истекла

Шаг 2: Проверка в cPanel

  1. Перейдите в SSL/TLS Status
  2. Найдите ваш домен
  3. Статус должен быть Secure (зеленая галочка)

Шаг 3: Проверка онлайн

Используйте инструменты:

Методы настройки редиректа

Метод 1: .htaccess (рекомендуется)

Универсальный метод для Apache серверов.

Базовый редирект для всего сайта

  1. Откройте File Manager в cPanel
  2. Перейдите в public_html
  3. Найдите файл .htaccess (включите "Show Hidden Files")
  4. Если файл не существует - создайте его
  5. Добавьте в начало файла:
# Редирект всего сайта на HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Объяснение:

  • RewriteEngine On - включает модуль перезаписи
  • RewriteCond %{HTTPS} off - проверяет, что соединение НЕ HTTPS
  • RewriteRule ^(.*)$ - применяется ко всем URL
  • https://%{HTTP_HOST}%{REQUEST_URI} - перенаправляет на HTTPS версию
  • [L,R=301] - последнее правило (L) и постоянный редирект (301)

Редирект с www на https://www

Если хотите чтобы все перенаправлялось на https://www.example.com:

# Редирект на HTTPS с WWW
RewriteEngine On

# Сначала добавляем www если его нет
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Затем редиректим на HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Редирект без www на https:// (без www)

Если хотите https://example.com (без www):

# Редирект на HTTPS без WWW
RewriteEngine On

# Удаляем www если есть
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [L,R=301]

# Редиректим на HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Универсальный редирект (работает всегда)

Если базовый метод не работает, используйте альтернативный:

# Универсальный HTTPS редирект
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Или через переменную окружения:

  1. Через ENV переменную (для некоторых хостингов)

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

Для Cloudflare или за прокси

Если используете Cloudflare или сайт за прокси:

# Редирект для Cloudflare
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Исключение конкретных страниц

Если нужно исключить некоторые URL из редиректа:

# HTTPS редирект с исключениями
RewriteEngine On
RewriteCond %{HTTPS} off
# Исключить /api/ и /webhook/
RewriteCond %{REQUEST_URI} !^/api/
RewriteCond %{REQUEST_URI} !^/webhook/
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Метод 2: cPanel Redirects

Графический интерфейс для простых редиректов.

Настройка через Redirects

  1. Перейдите в DomainsRedirects
  2. Нажмите Create a Redirect
  3. Заполните форму:

Type: Permanent (301)

Domain: выберите ваш домен

Directory (optional): оставьте пустым

Redirects to: https://example.com

www. redirection:

  • Redirect with or without www. - редиректит оба варианта
  • Или выберите конкретный вариант

Wild Card Redirect: ON (галочка)

  1. Нажмите Add

Шаблон:Совет

Метод 3: WordPress

Специальные методы для WordPress сайтов.

Через wp-config.php

Добавьте в файл wp-config.php перед строкой /* That's all, stop editing! */:

// Принудительный HTTPS для всего сайта
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

// Принудительный HTTPS для админки
define('FORCE_SSL_ADMIN', true);

// Если за прокси (Cloudflare)
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS']='on';
}

Через functions.php темы

Добавьте в functions.php вашей темы:

// Редирект на HTTPS
function redirect_to_https() {
    if (!is_ssl()) {
        wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301);
        exit();
    }
}
add_action('template_redirect', 'redirect_to_https');

Плагины WordPress

Рекомендуемые плагины:

  • Really Simple SSL - автоматическая настройка HTTPS
  • SSL Insecure Content Fixer - исправление смешанного контента
  • WP Force SSL - принудительный HTTPS

Изменение URL в базе данных

После настройки редиректа обновите URL в WordPress:

Через админ-панель:

  1. Settings → General
  2. Измените:
  3. Save Changes

Через WP-CLI:

wp search-replace 'http://example.com' 'https://example.com' --dry-run
wp search-replace 'http://example.com' 'https://example.com'

Через SQL (осторожно!):

-- ОБЯЗАТЕЛЬНО сделайте backup перед выполнением! UPDATE wp_options SET option_value = REPLACE(option_value, 'http://example.com', 'https://example.com'); UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://example.com', 'https://example.com'); UPDATE wp_posts SET guid = REPLACE(guid, 'http://example.com', 'https://example.com'); UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://example.com', 'https://example.com');

Метод 4: Другие CMS

Joomla

Через .htaccess: Используйте базовый метод .htaccess (см. Метод 1)

Через Global Configuration:

  1. System → Global Configuration
  2. Server tab
  3. Force HTTPS: Entire Site
  4. Save & Close

Drupal

Через settings.php:

// Добавьте в settings.php
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $_SERVER['HTTPS'] = 'on';
}

Плюс .htaccess редирект (Метод 1)

Magento

Через админ-панель:

  1. Stores → Configuration → General → Web
  2. Base URLs (Secure):
    • Secure Base URL: https://example.com/
    • Use Secure URLs on Storefront: Yes
    • Use Secure URLs in Admin: Yes

Плюс .htaccess редирект

OpenCart

Через конфиг файлы:

Измените в config.php и admin/config.php:

define('HTTP_SERVER', 'https://example.com/');
define('HTTPS_SERVER', 'https://example.com/');

Проверка редиректа

Ручная проверка

  1. Откройте браузер в режиме инкогнито
  2. Перейдите на http://example.com (без S)
  3. Должно автоматически перенаправить на https://example.com
  4. Проверьте замочек в адресной строке

Проверка с www/без www

Проверьте все варианты:

Через curl (командная строка)

# Проверка редиректа
curl -I http://example.com

# Должен показать:
# HTTP/1.1 301 Moved Permanently
# Location: https://example.com/
  1. Проверка с автоматическим следованием редиректу

curl -IL http://example.com

  1. Должен показать 301, затем 200 OK на HTTPS

Онлайн инструменты

Решение проблем

Проблема: Бесконечный редирект (Redirect Loop)

Симптомы:

  • Браузер показывает "ERR_TOO_MANY_REDIRECTS"
  • Страница постоянно перезагружается

Причины:

  1. Конфликтующие правила редиректа
  2. Неправильная конфигурация на Cloudflare
  3. Проблемы с SSL на хостинге

Решение 1: Проверьте .htaccess

# Убедитесь что нет дублирующихся правил
# Должно быть только ОДНО правило HTTPS редиректа

Решение 2: Для Cloudflare

  1. Cloudflare → SSL/TLS → Overview
  2. Измените режим на Full (strict) или Full
  3. Не используйте Flexible

Решение 3: Временно отключите редирект

  1. Переименуйте .htaccess в .htaccess.bak
  2. Проверьте работает ли HTTPS напрямую
  3. Верните .htaccess и исправьте правила

Проблема: Смешанный контент (Mixed Content)

Симптомы:

  • Замочек перечеркнут или с предупреждением
  • В консоли браузера: "Mixed Content" warnings

Причина: На HTTPS странице загружаются HTTP ресурсы (изображения, CSS, JS)

Решение: См. подробное руководство: Исправление смешанного контента cPanel

Быстрое решение через .htaccess:

# Автоматически обновляет HTTP запросы к HTTPS
Header always set Content-Security-Policy "upgrade-insecure-requests;"

Проблема: WordPress админка не работает

Симптомы:

  • Не можете войти в wp-admin
  • Бесконечный редирект на странице входа

Решение: Добавьте в wp-config.php:

define('FORCE_SSL_ADMIN', true);

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

Проблема: Некоторые страницы не редиректятся

Проверьте:

  1. .htaccess находится в правильной директории (public_html)
  2. В .htaccess нет RewriteEngine Off
  3. Нет исключений для конкретных страниц
  4. Apache модуль mod_rewrite включен (обычно включен по умолчанию)

Решение: Добавьте в начало .htaccess:

# Убедитесь что mod_rewrite работает
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

Проблема: Редирект работает, но медленно

Причина: Временный редирект (302) вместо постоянного (301)

Решение: Убедитесь что используете R=301 в RewriteRule:

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
                                                            ^^^^
                                                        Важно: 301

Очистите кэш браузера:

  • Chrome: Ctrl+Shift+Delete → Очистить изображения и файлы кэша
  • Firefox: Ctrl+Shift+Delete → Кэш
  • Safari: Command+Option+E

Проблема: API endpoints не работают

Причина: Некоторые API должны быть доступны по HTTP

Решение: Исключите API из редиректа:

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

HSTS (HTTP Strict Transport Security)

После настройки редиректа, добавьте HSTS для усиленной безопасности.

Что такое HSTS

HSTS заставляет браузер ВСЕГДА использовать HTTPS, даже если пользователь вводит HTTP.

Преимущества:

  • Защита от SSL stripping атак
  • Быстрее (нет HTTP запроса)
  • Лучше для SEO

Включение HSTS

Добавьте в .htaccess ПОСЛЕ редиректа:

# HSTS - 1 год (включая поддомены)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Параметры:

  • max-age=31536000 - время действия (1 год в секундах)
  • includeSubDomains - применяется к поддоменам
  • preload - для включения в список preload браузеров

Шаблон:Предупреждение

Тестирование HSTS

Через браузер:

  1. Chrome → DevTools (F12) → Network
  2. Обновите страницу
  3. Найдите заголовок Strict-Transport-Security

Через curl:

curl -I https://example.com | grep -i strict

HSTS Preload

Для максимальной безопасности, добавьте сайт в HSTS Preload List:

  1. Включите HSTS с preload параметром
  2. Подождите несколько дней
  3. Отправьте заявку на hstspreload.org
  4. После одобрения браузеры будут ВСЕГДА использовать HTTPS

Шаблон:Важно

Полная конфигурация .htaccess

Рекомендуемая полная конфигурация для производственного сайта:

# ============================================
# HTTPS Редирект и безопасность
# ============================================

# Включить mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On

# Базовые настройки
RewriteBase /

# Редирект на HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Редирект с www на без www (или наоборот - раскомментируйте нужное)
# Без www:
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [L,R=301]

# С www (раскомментируйте если нужно):
# RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

</IfModule>

# ============================================
# Заголовки безопасности
# ============================================

<IfModule mod_headers.c>

# HSTS - заставить использовать HTTPS (1 год)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

# Предотвратить MIME-type sniffing
Header always set X-Content-Type-Options "nosniff"

# Защита от clickjacking
Header always set X-Frame-Options "SAMEORIGIN"

# XSS Protection
Header always set X-XSS-Protection "1; mode=block"

# Referrer Policy
Header always set Referrer-Policy "strict-origin-when-cross-origin"

# Content Security Policy (настройте под свой сайт)
# Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';"

# Автообновление небезопасных запросов
Header always set Content-Security-Policy "upgrade-insecure-requests;"

</IfModule>

# ============================================
# Производительность
# ============================================

# Сжатие
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
</IfModule>

# Кэширование
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
</IfModule>

Проверочный список

Перед настройкой

- [ ] SSL сертификат установлен - [ ] Сайт открывается по HTTPS - [ ] Нет ошибок сертификата - [ ] Создана резервная копия .htaccess - [ ] Создана резервная копия сайта

После настройки

- [ ] HTTP редиректит на HTTPS - [ ] www/без www работают правильно - [ ] Все страницы доступны - [ ] Нет бесконечного редиректа - [ ] Нет mixed content warnings - [ ] Админ-панель работает (если CMS) - [ ] Формы отправляются - [ ] API endpoints работают - [ ] Проверено в разных браузерах - [ ] HSTS заголовок установлен (опционально)

Тестирование

- [ ] Открывается http://example.com - [ ] Открывается http://www.example.com - [ ] Открывается https://example.com - [ ] Открывается https://www.example.com - [ ] Проверено в режиме инкогнито - [ ] Проверено на мобильном - [ ] Проверено через SSL Labs - [ ] Проверено через Why No Padlock

Лучшие практики

  1. Используйте 301 редирект
    • Постоянный редирект (301) лучше для SEO
    • Временный (302) не передает вес ссылок
  2. Единый канонический URL
    • Выберите один вариант: с www или без www
    • Редиректьте все варианты на канонический
  3. Включите HSTS
    • После стабильной работы HTTPS
    • Начните с меньшего max-age, затем увеличьте
  4. Исправьте смешанный контент
    • Все ресурсы должны загружаться по HTTPS
    • Используйте относительные URL
  5. Обновите sitemap.xml
    • Все URL должны быть с https://
    • Отправьте в Google Search Console
  6. Обновите ссылки в соцсетях
    • Facebook, Twitter, Instagram и др.
  7. Мониторьте ошибки
    • Проверяйте логи на 404, 500 ошибки
    • Настройте алерты на проблемы с сертификатом

Производительность

Влияние на скорость

HTTPS немного медленнее HTTP из-за:

  • SSL handshake
  • Шифрование/дешифрование

Но современные оптимизации компенсируют:

  • HTTP/2 (работает только через HTTPS) - быстрее HTTP/1.1
  • TLS 1.3 - быстрый handshake
  • Session resumption - повторное использование сессий

Оптимизация HTTPS

  1. Используйте HTTP/2
    • Обычно включен на современных серверах
  2. Включите OCSP Stapling
    • Ускоряет проверку сертификата
    • Настраивается на уровне сервера
  3. Используйте CDN
    • Cloudflare, AWS CloudFront
    • Кэшируют контент ближе к пользователям
  4. Session Resumption
    • Обычно включен по умолчанию

Отмена редиректа

Если нужно временно вернуться на HTTP:

Метод 1: Переименовать .htaccess

# Через File Manager или SSH
mv .htaccess .htaccess.disabled

Метод 2: Закомментировать правила

Откройте .htaccess и добавьте # перед правилами:

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

Метод 3: Удалить через cPanel Redirects

  1. Domains → Redirects
  2. Найдите HTTPS редирект
  3. Нажмите Delete

Шаблон:Предупреждение

Миграция с HTTP на HTTPS - чеклист

Этап 1: Подготовка (за неделю)

- [ ] Установлен SSL сертификат - [ ] Протестирован HTTPS доступ - [ ] Проверены все поддомены - [ ] Созданы резервные копии

Этап 2: Миграция (день X)

- [ ] Настроен .htaccess редирект - [ ] Обновлены внутренние ссылки - [ ] Исправлен смешанный контент - [ ] Обновлены конфиг файлы CMS

Этап 3: SEO (сразу после)

- [ ] Обновлен sitemap.xml - [ ] Отправлен в Google Search Console - [ ] Обновлен robots.txt (если есть) - [ ] Проверены canonical tags - [ ] Обновлены Open Graph теги

Этап 4: Внешние сервисы

- [ ] Обновлены URL в соцсетях - [ ] Обновлены внешние ссылки - [ ] Уведомлены партнеры об изменении - [ ] Обновлены рекламные кампании

Этап 5: Мониторинг (первая неделя)

- [ ] Проверка позиций в поиске - [ ] Мониторинг трафика - [ ] Проверка логов на ошибки - [ ] Проверка срока действия SSL

Этап 6: Оптимизация (через месяц)

- [ ] Включен HSTS - [ ] Оптимизирована производительность - [ ] Добавлен в HSTS Preload (опционально)

См. также

Внешние ссылки


---

Последнее обновление: 30 январь 2026