Налаштування 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 години.







