Форумы / National / Russian / Тех. поддержка / Hello

Help my

  • Теги: 80
sanek42
#1 16.02.2020 10:49

Здравствуйте, у меня такая проблемма, устанавливал разные версии, какие только не пробовал все приходит к одному.

откуда там берется 80 порт я не понимаю. когда его стираешь и обновляешь страницу, вход выполнен нормально

нажимаю на кнопку входа (уже ввел логин пароль) выскакивает страница с надписью

 

Dayver
#2 17.02.2020 20:34

Скорее всего дело в кривых заголовках которые генерирует ваш хостинг ... но точнее сказать сложно поскольку мало информации о вашей проблеме

Pavlo Tkachenko aka Dayver
prostogorod
#3 23.02.2020 18:32
#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
#4 25.02.2020 07:21
#44505 prostogorod:

Я тоже думал, что хостинг, но заменил старый common.php и порт :80 исчез в урлах.

Потом нашел разницу в коде:

Ну вот видите - вы не разобрались и просто стали использовать код старой версии движка вместо того что бы понять почему из-за заголовков на вашем хостинге движок с новым кодом не правильно их интерпретирует и работает не корректно.  По вашей версии проблема в новом коде, но почему он у многих работает нормально и только у единиц сбоит? Может всетаки дело в хостинге? А всего то нужно вставить в код, временно строчку

echo '<pre>'.print_r($_SERVER, true).'</pre>';

посмотреть что отдает сервер в заголовки и разобратся в чем причина. 

Была бы эта информация тут то можно было бы предметно о чем то говорить, а таааак все чем тут ожно помочь это сказать

#44491 Dayver:

Скорее всего дело в кривых заголовках которые генерирует ваш хостинг ... но точнее сказать сложно поскольку мало информации о вашей проблеме

Pavlo Tkachenko aka Dayver
prostogorod
#5 25.02.2020 21:28

Ну вот видите - вы не разобрались и просто стали использовать код старой версии движка вместо того что бы понять почему из-за заголовков на вашем хостинге движок с новым кодом не правильно их интерпретирует и работает не корректно. 

 В том то и дело, очень интересно разобраться))) Но сам тонкостей не знаю. Вот что сервер отдает:

[LC_ALL] => ru_RU.CP1251
[TEMP] => /home/ros1/.system/tmp
[PATH] => /usr/local/bin:/usr/bin:/bin

 

Отредактировано: prostogorod (28.02.2020 06:39, 4 года назад)
Dayver
#6 27.02.2020 21:46
#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
Отредактировано: Dayver (27.02.2020 22:08, 4 года назад)
prostogorod
#7 21.11.2020 11:21

Да вижу это несоответствие, должно быть [SERVER_PORT] => 443 Вот что написал, возможно один из лучших хостеров

На хостинге используется связка nginx-apach. На фронтэнде nginx принимает и обрабатывает https соединения на 443 порту. 
Если запрос нуждается в обработке apache он передается на бекэнд на 80й порт. 
Запросы к php файлам обрабатывает apache. Поэтому в $_SERVER['SERVER_PORT'] в phpinfo() Вы видите значение 80. 
Как возможное решение в вашей ситуации вы можете 
использовать переменную $_SERVER['HTTP_SSL'] если соединение зашифровано то результат из переменной = 1

Они подталкиваю, что-то менять в движке, вижу они не правы. Насколько адекватен их ответ с технической стороны?