Forums / National / Russian / Тех. поддержка / Редиректы на нестандартных портах

Описание ошибки и решение

gospodinn
#1 2011-07-06 13:21

1. Установил Cotonti на localhost:8080. После отправки любой формы редирект происходит на localhost, т.е. порт отбрасывается.

2. Ошибка синтаксиса MySql при логировании IP пользователя (возникает, например, когда создаешь новую страницу). В запросе IP не был взят в кавычки.

Патч для №1.
=== (+12,-3) system/common.php ===
@@ -162,8 +162,17 @@
 {
 	$sys['host'] = $url['host'];
 }
-$sys['abs_url'] = $url['scheme'] . '://' . $sys['host'] . $sys['site_uri'];
-$sys['canonical_uri'] = $url['scheme'] . '://' . $sys['host'] . $_SERVER['REQUEST_URI'];
+if ($_SERVER['SERVER_PORT'] == 80 
+	|| $_SERVER['SERVER_PORT'] == 443)
+{
+	$sys['port'] = "";
+}
+else
+{
+	$sys['port'] = ":".$_SERVER['SERVER_PORT'];
+}
+$sys['abs_url'] = $url['scheme'] . '://' . $sys['host'] . $sys['port'] . $sys['site_uri'];
+$sys['canonical_uri'] = $url['scheme'] . '://' . $sys['host'] . $sys['port'] . $_SERVER['REQUEST_URI'];
 define('COT_ABSOLUTE_URL', $sys['abs_url']);
Патч для №2.
=== (+2,-2) system/functions.php ===
@@ -3859,7 +3859,7 @@
 	if ($cfg['shieldenabled'])
 	{
 		$shield_newlimit = $sys['now'] + floor($shield_add * $cfg['shieldtadjust'] /100);
-		$db->update($db_online, array('online_shield' => $shield_newlimit, 'online_action' => $shield_newaction), 'online_ip='.$usr['ip']);
+		$db->update($db_online, array('online_shield' => $shield_newlimit, 'online_action' => $shield_newaction), 'online_ip=\''.$usr['ip'].'\'');
 	}
Trustmaster
#2 2011-07-06 19:40

В первом случае, думаю, можно взять порт из $url['port'] и не делать определение через $_SERVER.

Спасибо за патчи, применю в ближайших коммитах.

Added 10 minutes later:

Вторая проблема была исправлена ранее.

May the Source be with you!
This post was edited by Trustmaster (2011-07-06 19:50, 13 years ago)
gospodinn
#3 2011-07-06 19:53
А нельзя ли вообще обойтись без вычисления abs_url? В конфиге ведь уже пописан правильный абсолютный адрес , может просто его учитывать?
$cfg['mainurl'] = 'http://localhost:8080';
Trustmaster
#4 2011-07-08 09:55
Если используются субдомены, то нельзя.
May the Source be with you!