Dodger 0 Опубликовано: 23 июня 2020 Рассказать Опубликовано: 23 июня 2020 (изменено) Добрый день. Не знаю баг это или не баг решать разработчикам. Совсем недавно хостинг Reg.ru обновлял серверные платформы и делал переносы сайтов и проблема заключалась в том, что сайт изначально работал по протоколу http , но при открытие любой новости, ссылка открывалась по протоколу https, из-за этого половина сайта не работала. Забросав тех поддержку вопросами о данной проблеме, они сначала в нее не верили, говорили, что это кэш и его надо чистить, но когда предоставили доказательства, что из разных браузеров и разных устройствах эта проблема есть, естественно они начали шевелиться... Проблема заключалась в том, что скрипты сайта не были рассчитаны на одну конфигурацию сервера. Это недочёт в скриптах, подробнее: Скрипты вашего сайта считали, что обращение к сайту производилось по HTTPS протоколу, хотя обращения было по HTTP. Причина в логике работы функции isSSL. Вот данная функция(файл /var/www/test/public_html/engine/modules/functions.php 3093 function isSSL() { 3094 if( (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') 3095 || (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') 3096 || (!empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') 3097 || (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) 3098 || (isset($_SERVER['HTTP_X_FORWARDED_PORT']) && $_SERVER['HTTP_X_FORWARDED_PORT'] == 443) 3099 || (isset($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https') 3100 || (isset($_SERVER['CF_VISITOR']) && $_SERVER['CF_VISITOR'] == '{"scheme":"https"}') 3101 || (isset($_SERVER['HTTP_CF_VISITOR']) && $_SERVER['HTTP_CF_VISITOR'] == '{"scheme":"https"}') 3102 ) return true; else return false; 3103 } Пробуем вызвать данную функцию вне остального движка, что бы исключить его влияние на проблему: test@test.test3.cp.regruhosting.ru [~/public_html]# cat test.php <?php define(„DATALIFEENGINE“,true); include_once(„engine/modules/functions.php“); var_dump(isSSL()); test@test.test3.cp.regruhosting.ru [~/public_html]# Вот такой ответ получаем на выходе: :~$ curl http://www.site.ru/test.php bool(true) :~$ Функция вернула true на проверку HTTPS соединения с сайтом. Почему так произошло? - Проверяем переменную $_SERVER[„HTTPS“] которую скрипты получают от сервера: test@test.test3.cp.regruhosting.ru [~/public_html]# cat test.php <?php var_dump($_SERVER['HTTPS']); test@test.test3.cp.regruhosting.ru [~/public_html]# Получаем такой ответ: :~$ curl http://www.site.ru/test.php string(3) "Off" :~$ Возвращаемся к телу функции и видим такую проверку: 3094 if( (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') Разработчики DLE не сделали проверку на Off (речь идёт о регистре букв, тк off в php не равняется Off). Немного скорректировали данную проверку: 3094 if( (!empty($_SERVER['HTTPS']) && ( ($_SERVER['HTTPS'] !== 'off') && ($_SERVER['HTTPS'] !== 'Off'))) После этого потребовалось отчистить кэш CMS. Сделали это через удаление файлов engine/cache/system/ Изменено 23 июня 2020 пользователем Dodger Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 072 Опубликовано: 23 июня 2020 Рассказать Опубликовано: 23 июня 2020 Системный администратор сервера "скреативил" прописал значение настроек сервера по непонятным причинам с большой буквы, их нужно либо не ставить в данном случае, либо как принято, писать значения маленькими буквами. Он мог написать там и OFF и OfF для сервера это все равно, а вот для корректного чтения этих настроек уже могут быть проблемы. Как правило так не не креативят в настройках сервера. За несколько лет существования этой функции, это первый такой "креатив" на практике. В DLE будет добавлены механизмы контроля от подобной вольной интерпретации написания серверный настроек. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.