Настройка HTTPS-редиректов 1С-Битрикс
Редирект с HTTP на HTTPS — задача, которую неопытные разработчики решают в нескольких местах одновременно: и в .htaccess, и в init.php, и в настройках Битрикс. В результате — цепочки редиректов, которые замедляют загрузку и путают поисковые боты.
Правильное место для редиректа
Редирект должен быть ровно в одном месте. Приоритет — на уровне веб-сервера, до PHP.
Nginx:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
Apache (.htaccess):
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Если сайт за Cloudflare или другим reverse proxy — редирект настраивается в панели CDN, а на сервере дополнительный редирект не нужен (иначе будет петля).
Редирект с www на без www (и наоборот)
Выберите канонический домен и настройте редирект. В Битрикс дополнительно укажите канонический домен в Настройки → Сайты → [сайт] — это влияет на генерацию абсолютных URL в компонентах.
В SEO-настройках (Контент → SEO → Настройки) включите тег <canonical> — Битрикс сам подставит правильный домен.
HSTS — принудительный HTTPS на уровне браузера
После стабильной работы HTTPS добавьте заголовок HSTS в nginx:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Начните с коротким max-age (3600), убедитесь, что всё работает, затем увеличьте до 31536000. HSTS с preload и регистрация в браузерных preload-листах — следующий уровень, требует отдельной процедуры.
Проверка цепочки редиректов
curl -I -L http://www.example.com/ 2>&1 | grep -E "HTTP/|Location:"
Допустимая цепочка: максимум один 301. Два и более — проблема.
Случай из практики
Корпоративный сайт: редирект был настроен и в .htaccess (с www на без www + HTTP→HTTPS), и в init.php (дополнительная проверка $_SERVER['HTTPS']), и в nginx. Суммарная цепочка — 3 редиректа. PageSpeed Insights показывал это как критическую проблему. Решение: убрали редиректы из .htaccess и init.php, оставили только в nginx-конфиге. Время первого байта сократилось на 150–300 мс.
Сроки выполнения
Настройка и проверка HTTPS-редиректов — 1–2 часа.







