Zachování portu při absolutním routování

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Pavel Janda
Člen | 977
+
0
-

Ahoj, prosímvás jak nechat Nette udržet port při redirectech a link metodách, pokud routuji absolutně? Ono si ho rádo drží jen při relativním routování.. Díky

Port 8000
Protokol HTTP
Nette poslední composerové (~2.3.0)
Vhost: a.b.c
Celá URL projektu: http://a.b.c:8000/

Postup: Stáhnu Nette Sandbox, řeknu Apachi, ať poslouchá na 8000. Vytvořím Router:

$router[] = new Route(
	'//[<subsub>.][<sub>.]%domain%', [
		'presenter' => 'Homepage',
		'action' => 'default'
	]
);

Teď ani nedostanu stránku, kvůli kanonizaci se rovnou přesměruje na http://a.b.c. Vypnu auto kanonizaci, vytvořím link:

	{link //this}

Co dostanu:

	http://b.c // b.c je OK, port je neOK

Editoval Beton (16. 7. 2015 18:50)

Jan Tvrdík
Nette guru | 2595
+
0
-

Jaký port, jaký protokol, jaká verze Nette, jaký konkrétní router? Dokážeš to izolovat?

Pavel Janda
Člen | 977
+
0
-

Rozšířil jsem otázku.

Jan Tvrdík
Nette guru | 2595
+
0
-

Zkusil bych

$router[] = new Route(
    '//[<subsub>.][<sub>.]%domain%:8000', [
        'presenter' => 'Homepage',
        'action' => 'default'
    ]
);
Pavel Janda
Člen | 977
+
0
-

To jsem zkoušel. Jako parametr, natvrdo. Nijak se tam nenechá mrcha dostat.

Pavel Janda
Člen | 977
+
0
-

Edit: Sakra, já to chtěl dát vedle

Editoval Beton (17. 7. 2015 11:15)

Pavel Janda
Člen | 977
+
0
-

Vyměnil jsem tyto řádky (počínaje řádkem 397) Nette\Application\Routers\Route:

} else {
	$host = $refUrl->getHost();
	$host = ip2long($host) ? [$host] : array_reverse(explode('.', $host));
	$url = strtr($url, [
		'/%basePath%/' => $refUrl->getBasePath(),
		'%tld%' => $host[0],
		'%domain%' => isset($host[1]) ? "$host[1].$host[0]" : $host[0],
	]);
	$url = ($this->flags & self::SECURED ? 'https:' : 'http:') . $url;
}

za tyto:

} else {
	$host = $refUrl->getHost();
	$host = ip2long($host) ? [$host] : array_reverse(explode('.', $host));
	$domain = isset($host[1]) ? "$host[1].$host[0]" : $host[0];
	$protocol = $this->flags & self::SECURED ? 'https' : 'http';

	if ($refUrl->getPort() !== Nette\Http\Url::$defaultPorts[$protocol]) { // If port differs from :80
		$port = ":{$refUrl->getPort()}";
	} else {
		$port = '';
	}

	$url = strtr($url, [
		'/%basePath%/' => $refUrl->getBasePath(),
		'%tld%' => $host[0],
		'%domain%' => $domain . $port,
	]);
	$url = "$protocol:$url";
}

Dává to smysl? Mám to poslat jako pullrequest? Je to chyba Nette?

Edit: Protokol, viz odpovědi

Editoval Beton (17. 7. 2015 13:32)

Jan Tvrdík
Nette guru | 2595
+
0
-

Kouknu na to a dám vědět.

David Matějka
Moderator | 6445
+
0
-

@Beton minimalne bys tam mel resit i defaultni port pro https, nejen http

Pavel Janda
Člen | 977
+
0
-

@DavidMatějka Aj, good point.
@JanTvrdík Díky.

Editoval Beton (17. 7. 2015 12:36)