russhe 0 Опубликовано: 2 мая 2019 Рассказать Опубликовано: 2 мая 2019 Здравствуйте, тег {full-link} формирует ссылки с https, хотя протокол отключен. Наблюдается как в коротких новостях, так и через тег {custom ..} Пример: http://www.itdom-nn.ru/news/ В базе данных смотрел, ничего такого нет. Версия php 5.4.16, может из-за этого? Если из-за версии, можно ли как-то это исправить не меняя версию? Заранее благодарен за ответы. Цитата Ссылка на сообщение Поделиться на других сайтах
alukardua 27 Опубликовано: 2 мая 2019 Рассказать Опубликовано: 2 мая 2019 1 час назад, russhe сказал: Здравствуйте, тег {full-link} формирует ссылки с https, хотя протокол отключен. Наблюдается как в коротких новостях, так и через тег {custom ..} Пример: http://www.itdom-nn.ru/news/ В базе данных смотрел, ничего такого нет. Версия php 5.4.16, может из-за этого? Если из-за версии, можно ли как-то это исправить не меняя версию? Заранее благодарен за ответы. Дело не в базе, проверь в настройках домена наличие сертификата, если раньше был на https то попробуй провести перестройку новостей Цитата Ссылка на сообщение Поделиться на других сайтах
russhe 0 Опубликовано: 2 мая 2019 Рассказать Опубликовано: 2 мая 2019 (изменено) Автор Перестроение новостей не помогло, в навигации смотрю так же ссылки с https, думаю что все же в версии php проблема. Переносил с другого домена, на нем работает без проблем. Может можно как-то глобально это отключить в дле не меняю версию? В link rel="canonical" так же ссылка с https Изменено 2 мая 2019 пользователем russhe Цитата Ссылка на сообщение Поделиться на других сайтах
russhe 0 Опубликовано: 2 мая 2019 Рассказать Опубликовано: 2 мая 2019 Автор Смотрю информацию по php и вижу: SCRIPT_URI https://www.itdom-nn.ru/url.php _SERVER["SCRIPT_URI"]https://www.itdom-nn.ru/url.php Хотя фактически обращаюсь к скрипту без https, видимо что-то с настройками сервера? Можно в DLE что-то поправить что бы он принудительно брал http? Цитата Ссылка на сообщение Поделиться на других сайтах
alukardua 27 Опубликовано: 2 мая 2019 Рассказать Опубликовано: 2 мая 2019 32 минуты назад, russhe сказал: Смотрю информацию по php и вижу: SCRIPT_URI https://www.itdom-nn.ru/url.php _SERVER["SCRIPT_URI"]https://www.itdom-nn.ru/url.php Хотя фактически обращаюсь к скрипту без https, видимо что-то с настройками сервера? Можно в DLE что-то поправить что бы он принудительно брал http? возможно в настройках сервера стоит редирект на https, проверь настройки редиректа на сервере Цитата Ссылка на сообщение Поделиться на других сайтах
russhe 0 Опубликовано: 2 мая 2019 Рассказать Опубликовано: 2 мая 2019 Автор Редиректа нет, так бы с главной и статических страниц так же редиректило, тут именно урл не верно формируется из-за этого. Доступа к серверу нет, решил следующим образом. В файле engine\init.php 80-82 строка заменил: if( isSSL() AND stripos( $config['http_home_url'], 'http://' ) !== false ) { $config['http_home_url'] = str_replace( "http://", "https://", $config['http_home_url'] ); } На: if( isSSL() AND stripos( $config['http_home_url'], 'http://' ) !== false ) { $config['http_home_url'] = str_replace( "http://", "http://", $config['http_home_url'] ); } Это исправило формирование урл на сайта, в ссылках категории, канонических страницах и навигации. Дальше в файле engine/ajax/controller.php на 117-123 строки заменил: if (strpos($config['http_home_url'], "//") === 0) { $config['http_home_url'] = isSSL() ? $config['http_home_url'] = "https:".$config['http_home_url'] : $config['http_home_url'] = "http:".$config['http_home_url']; } elseif (strpos($config['http_home_url'], "/") === 0) { $config['http_home_url'] = isSSL() ? $config['http_home_url'] = "https://".$_SERVER['HTTP_HOST'].$config['http_home_url'] : "http://".$_SERVER['HTTP_HOST'].$config['http_home_url']; } elseif( isSSL() AND stripos( $config['http_home_url'], 'http://' ) !== false ) { $config['http_home_url'] = str_replace( "http://", "https://", $config['http_home_url'] ); } На: if (strpos($config['http_home_url'], "//") === 0) { $config['http_home_url'] = isSSL() ? $config['http_home_url'] = "http:".$config['http_home_url'] : $config['http_home_url'] = "http:".$config['http_home_url']; } elseif (strpos($config['http_home_url'], "/") === 0) { $config['http_home_url'] = isSSL() ? $config['http_home_url'] = "http://".$_SERVER['HTTP_HOST'].$config['http_home_url'] : "http://".$_SERVER['HTTP_HOST'].$config['http_home_url']; } elseif( isSSL() AND stripos( $config['http_home_url'], 'http://' ) !== false ) { $config['http_home_url'] = str_replace( "http://", "http://", $config['http_home_url'] ); } Это исправило проблему формирования урл в админке при загрузке картинок на сервер. Решал методом научного тыка, возможно что-то выплывет еще в процессе работы, возможно можно это сделать проще, не силен в программировании. Цитата Ссылка на сообщение Поделиться на других сайтах
maksror 1 Опубликовано: 29 июня 2020 Рассказать Опубликовано: 29 июня 2020 (изменено) Я столкнулся с подобной проблемой. Решение от "russhe" имеет место быть, но не известно какие последствия оно будет иметь в будущем, тем более если потребуется перенести проект на HTTPS протокол. В ходе своего дебага я капнул немного глубже и нашёл причину проблемы, по крайней мере для моего случая. Думаю, что проблема иногда возникает у пользователей, поэтому опубликую своё решение. Как заметил "russhe" в посте выше проблема возникает на этом этапе(engine\init.php) if( isSSL() AND stripos( $config['http_home_url'], 'http://' ) !== false ) { $config['http_home_url'] = str_replace( "http://", "https://", $config['http_home_url'] ); } Но причина проблемы не в замене http на https, а в самой проверке. Из этого блока кода проблемной(у меня) являлась проверка isSSL(). Данная функция описана в файле engine/modules/functions.php (строки 3093-3103): function isSSL() { if( (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') || (!empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') || (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) || (isset($_SERVER['HTTP_X_FORWARDED_PORT']) && $_SERVER['HTTP_X_FORWARDED_PORT'] == 443) || (isset($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https') || (isset($_SERVER['CF_VISITOR']) && $_SERVER['CF_VISITOR'] == '{"scheme":"https"}') || (isset($_SERVER['HTTP_CF_VISITOR']) && $_SERVER['HTTP_CF_VISITOR'] == '{"scheme":"https"}') ) return true; else return false; } Как проверить, у вас что проблема именно в функции isSSL(): 1. Создаём скрипт со следующим содержимым: <?php define("DATALIFEENGINE",true); include_once("engine/modules/functions.php"); var_dump(isSSL()); 2. Обращаемся к данному скрипту через браузер. Если вы обращались по HTTP протоколу, но получили ответ bool(true), то у вас проблема о которой я говорю. Проблема заключается в переменных веб-серверов($_SERVER["VARIABLE"]). Для примера рассмотрю проверку одной такой переменной. В условиях указано $_SERVER['HTTPS'] !== 'off'. Проверки этой переменной на совпадение с Off нет(внимание на регистр off != Off). Как указывать off или Off выбирает системный администратор сервера(оба варианта имею место быть и являются правильными) и если вы используете, например shared хостинг менять значение на уровне веб-серверов не будут. Проверить такая проблема у вас или нет можно простым скриптом: <?php var_dump($_SERVER['HTTPS']); После чего к скрипту нужно обратиться через браузер(запуск через php-cli не даст нужной информации) по HTTP протоколу. Есть вероятность, что вы получите ответ: string(3) "Off" Соответственно на этом этапе мы и получаем неправильную проверку протоколу, ведь off != Off. Такую же проверку вы можете сделать для других переменных, если есть желание чётко понять значение какой переменной ломает проверку. Я решил проблему с помощью функции strtolower изменив функцию isSSL() следующим образом: function isSSL() { if( (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') || (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') || (!empty($_SERVER['HTTP_X_FORWARDED_SSL']) && strtolower($_SERVER['HTTP_X_FORWARDED_SSL']) == 'on') || (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) || (isset($_SERVER['HTTP_X_FORWARDED_PORT']) && $_SERVER['HTTP_X_FORWARDED_PORT'] == 443) || (isset($_SERVER['REQUEST_SCHEME']) && strtolower($_SERVER['REQUEST_SCHEME']) == 'https') || (isset($_SERVER['CF_VISITOR']) && strtolower($_SERVER['CF_VISITOR']) == '{"scheme":"https"}') || (isset($_SERVER['HTTP_CF_VISITOR']) && strtolower($_SERVER['HTTP_CF_VISITOR']) == '{"scheme":"https"}') ) return true; else return false; } Дальше нужно отчистить кэш движка (engine/cache/system/). Надеюсь данное решение поможет кому-то из пользователей DLE. Изменено 29 июня 2020 пользователем maksror 1 Цитата Ссылка на сообщение Поделиться на других сайтах
kamensk 86 Опубликовано: 30 июня 2020 Рассказать Опубликовано: 30 июня 2020 16 часов назад, maksror сказал: Как указывать off или Off выбирает системный администратор сервера(оба варианта имею место быть и являются правильными) Откуда такое утверждение? От горе администраторов нужно бежать, а не соглашаться с их "мегаопытом". Ответ таков: В 23.06.2020 в 10:10, celsoft сказал: Системный администратор сервера "скреативил" прописал значение настроек сервера по непонятным причинам с большой буквы, их нужно либо не ставить в данном случае, либо как принято, писать значения маленькими буквами. Он мог написать там и OFF и OfF для сервера это все равно, а вот для корректного чтения этих настроек уже могут быть проблемы. Как правило так не не креативят в настройках сервера. За несколько лет существования этой функции, это первый такой "креатив" на практике. В DLE будет добавлены механизмы контроля от подобной вольной интерпретации написания серверный настроек. 17 часов назад, maksror сказал: (оба варианта имею место быть и являются правильными) Если бы такой вариант был "правильным" - то тогда бы большинство пользователей сайто ДЛЕ сталкивались с подобной проблемой. Цитата Ссылка на сообщение Поделиться на других сайтах
maksror 1 Опубликовано: 2 июля 2020 Рассказать Опубликовано: 2 июля 2020 Данный топик открывал не я, значит как минимум у двух пользователей есть такая проблема) Бежать от "горе" администратора из-за этого я не собираюсь, уж извините. Между стабильность и дебагом софта длиною в два часа, я выберу второе) Повторюсь топик создавал не я, я лишь поделился своим способом решения, который на мой взгляд показался правильным. Если мои убитые пару часов помогут другим пользователям я буду рад, если они решат просто сменить сервак/хостера мне всё равно) On 6/30/2020 at 12:44 PM, kamensk said: Откуда такое утверждение? Вот тут пожалуй немного уточню, я не нашёл какого-либо стандарта по заданию данных переменных окружения веб-серверов. Да, есть дефолт, который редко меняют. Но с учётом того, что многие веб-серваки это открытый софт(не говоря уже о самописах) который поддерживает плагинистость, то вариаций может быть много. Предлагаю не разводить философские диалоги на тему того что правильно, а что нет. Расценивайте мой комментарий как решение частного(и редкого) случая. На звание истины в последней инстанции я не претендую) Цитата Ссылка на сообщение Поделиться на других сайтах
kamensk 86 Опубликовано: 2 июля 2020 Рассказать Опубликовано: 2 июля 2020 15 минут назад, maksror сказал: Повторюсь топик создавал не я, я лишь поделился своим способом решения, Несомненно вы правильно делаете, что делитесь найденным путем решения проблемы. 22 минуты назад, maksror сказал: Предлагаю не разводить философские диалоги на тему того что правильно, а что нет. Зачем разводить диалоги - разрабы уже взяли на заметку "отсебятину" хостеров-админов. Цитата В DLE будет добавлены механизмы контроля от подобной вольной интерпретации написания серверный настроек. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.