Очень часто после перевода сайта на HTTPS на платформе CMS 1С-Битрикс в его работе возникают ошибки.
Например при использовании стандартной функции LocalRedirect(), в которой в качестве параметра URL мы указываем ссылку относительно корня сайта (без указания протокола и домена), битрикс делает редирект вместо HTTPS на HTTP. Либо очень часто при работе с админкой, данные не сохраняются, это возникает потому что 1С-Битрикс делает запросы по протоколу HTTP. Либо периодически, по непонятным причинам выскакивает уведомление что сайт работает с ошибками, но когда мы запускаем Настройки->Инструмены->Проверка системы, то ошибок не видим.
Причина заключается в том что 1С-Битрикс не обладает информацией на каком протоколе работает сайт (наличии SSL-сертификата). Это связано с неверными настройками хостинга, из-за которых невозможно средствами PHP определить правильный протокол.
Я не стал тратить время на разбор ядра CMS 1С-Битрикс что бы найти все способы определения протокола работы сайта, поэтому опишу самое первое условие на проверку, он руководствуется информацией которая лежит в глобальной переменной $_SERVER, а точнее $_SERVER["SERVER_PORT"]
Если $_SERVER["SERVER_PORT"] == 443, то битрикс считает что сайт работает на HTTPS, если не 443, то он переходит к следующей проверке (которую я не стал разбирать, потому что достаточно первой).
Очень часто $_SERVER["SERVER_PORT"] == 80, хотя сайт работает на HTTPS. Мы конечно можем покопаться в настройках Nginx и Apache, что бы в переменную $_SERVER прилетали правильные данные. Кто то это сделает быстро, кто то потратит кучу времени и перероет весь интернет для этого, для кого то администрирование это темный лес, а у кого то вообще нет возможности вносить правки в конфиги настройки сервера. Поэтому опишу самый простой и самый быстрый способ перевода 1С-Битрикс на протокол HTTPS
Для этого открываем на редактирование файл "/bitrix/php_interface/dbconn.php" и прописываем в самом низу строчку:
<?
$_SERVER["SERVER_PORT"] = "443";
?>
Все, теперь 1С-Битрикс знает что сайт переведен на HTTPS.