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

- Pavel Janda
 - Člen | 977
 
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
 
Jaký port, jaký protokol, jaká verze Nette, jaký konkrétní router? Dokážeš to izolovat?

- Jan Tvrdík
 - Nette guru | 2595
 
Zkusil bych
$router[] = new Route(
    '//[<subsub>.][<sub>.]%domain%:8000', [
        'presenter' => 'Homepage',
        'action' => 'default'
    ]
);
				
- Pavel Janda
 - Člen | 977
 
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)

- David Matějka
 - Moderator | 6445
 
@Beton minimalne bys tam mel resit i defaultni port pro https, nejen http

- Pavel Janda
 - Člen | 977
 
@DavidMatějka Aj, good point.
@JanTvrdík Díky.
Editoval Beton (17. 7. 2015 12:36)