Help my
sanek42 |
|
---|---|
Здравствуйте, у меня такая проблемма, устанавливал разные версии, какие только не пробовал все приходит к одному. откуда там берется 80 порт я не понимаю. когда его стираешь и обновляешь страницу, вход выполнен нормально
|
Dayver |
|
---|---|
Скорее всего дело в кривых заголовках которые генерирует ваш хостинг ... но точнее сказать сложно поскольку мало информации о вашей проблеме Pavlo Tkachenko aka Dayver
|
prostogorod |
|
---|---|
#44491 Dayver: Я тоже думал, что хостинг, но заменил старый common.php и порт :80 исчез в урлах. Потом нашел разницу в коде: $sys['abs_url'] = $sys['scheme'] . '://' . $sys['host'] . ($sys['port']?':'.$sys['port']:'') . $sys['site_uri']; $sys['canonical_url'] = $sys['scheme'] . '://' . $sys['host'] . ($sys['port']?':'.$sys['port']:'') . cot_url_sanitize($_SERVER['REQUEST_URI']); Этот код генерирует порт :80 А этот нет: $sys['abs_url'] = $sys['scheme'] . '://' . $sys['host'] . $sys['site_uri']; $sys['canonical_url'] = $sys['scheme'] . '://' . $sys['host'] . cot_url_sanitize($_SERVER['REQUEST_URI']);
|
Dayver |
|
---|---|
#44505 prostogorod: Ну вот видите - вы не разобрались и просто стали использовать код старой версии движка вместо того что бы понять почему из-за заголовков на вашем хостинге движок с новым кодом не правильно их интерпретирует и работает не корректно. По вашей версии проблема в новом коде, но почему он у многих работает нормально и только у единиц сбоит? Может всетаки дело в хостинге? А всего то нужно вставить в код, временно строчку echo '<pre>'.print_r($_SERVER, true).'</pre>'; посмотреть что отдает сервер в заголовки и разобратся в чем причина. Была бы эта информация тут то можно было бы предметно о чем то говорить, а таааак все чем тут ожно помочь это сказать #44491 Dayver: Pavlo Tkachenko aka Dayver
|
prostogorod |
|
---|---|
В том то и дело, очень интересно разобраться))) Но сам тонкостей не знаю. Вот что сервер отдает: [LC_ALL] => ru_RU.CP1251 [TEMP] => /home/ros1/.system/tmp [PATH] => /usr/local/bin:/usr/bin:/bin
|
|
Bu gönderi prostogorod tarafından düzenlendi (2020-02-28 06:39, 5 yıllar önce) |
Dayver |
|
---|---|
#44514 prostogorod: Може удалить из поста - увидел, остальным не обязательно ..... хотя данные подозрительные, не похожи на те что должны быть у сайта который вижу в онлайне
И так начинаем разбиратся почему в <base href=""> попадает ссылка с портом .... в файле common.php есть 78 строка из которой видим что если $sys['port'] пустой то все норм а если в нем будет цифра то она и попадет в урл ... смотрим выше в 73 строку где идет определение этого параметра, а там условие если $sys['port'] == $def_port то будет все ок .
Но у вас $sys['port'] будет равен 80 (что не верно и при этом он в итоге еще и попадает в урл) ? а $def_port на основе ваши данных очевидно будет равен 443 (что верно поскольку сайт работает по безопасному протоколу).
Разберемся по очереди, сперва то что определилось корректно на основе 54 строки $sys['scheme'] = strpos($_SERVER['SERVER_PROTOCOL'], 'HTTPS') === false && $_SERVER['HTTPS'] != 'on' && $_SERVER['SERVER_PORT'] != 443 && $_SERVER['HTTP_X_FORWARDED_PORT'] !== 443 ? 'http' : 'https'; Разберем это уловие: ЕСЛИ strpos($_SERVER['SERVER_PROTOCOL'], 'HTTPS') === false И $_SERVER['HTTPS'] != 'on' И $_SERVER['SERVER_PORT'] != 443 И $_SERVER['HTTP_X_FORWARDED_PORT'] !== 443 ТОГДА = http ИНАЧЕ https Увидели что у вас хотя бы одно условие $_SERVER['HTTPS'] = 'on' ? а потому движок корректно думает что $sys['scheme'] = https Если $sys['scheme'] = https то поэтому $def_port и получил значение 443.
Ну и самое сладкое на десер. Почему $sys['port'] будет не верно равен 80 ? Ну наверное потому что в 65 строке $sys['port'] = $_SERVER['SERVER_PORT']; а у вас сервер дает [SERVER_PORT] => 80 .... почему? Почему если вы используете https протокол? Вопрос не по адресу. Я то догадываюсь но результата это не меняет - заголовки противоречивые.
Так может движок корректно работать если ему сервер дает противоречивую информацию?!
З.Ы. Расписал достаточно подробно что бы каждый мог при желании вникнуть и понять где ошибка. Как правило у большинства все работает корректно но не так уж и редко последнее время стали встречатся сервера где вот такая каша и у людей начинаются проблемы. А если они есть то сразу нужно смотреть на вот такие параметры которые отдает сервер $_SERVER['SERVER_PROTOCOL'] $_SERVER['HTTPS'] $_SERVER['SERVER_PORT'] $_SERVER['HTTP_X_FORWARDED_PORT'] и то что вы прописали в $cfg['mainurl'] Pavlo Tkachenko aka Dayver
|
|
Bu gönderi Dayver tarafından düzenlendi (2020-02-27 22:08, 5 yıllar önce) |
prostogorod |
|
---|---|
Да вижу это несоответствие, должно быть [SERVER_PORT] => 443 Вот что написал, возможно один из лучших хостеров На хостинге используется связка nginx-apach. На фронтэнде nginx принимает и обрабатывает https соединения на 443 порту. Если запрос нуждается в обработке apache он передается на бекэнд на 80й порт. Запросы к php файлам обрабатывает apache. Поэтому в $_SERVER['SERVER_PORT'] в phpinfo() Вы видите значение 80. Как возможное решение в вашей ситуации вы можете использовать переменную $_SERVER['HTTP_SSL'] если соединение зашифровано то результат из переменной = 1 Они подталкиваю, что-то менять в движке, вижу они не правы. Насколько адекватен их ответ с технической стороны? |