presmerovani nezohlednuje port
- Ondrej
- Člen | 110
Rad bych otevrel vlakno: https://forum.nette.org/…lednuje-port
Apache mam na portu 8080 a pri presmerovani Presenter::redirect() se port ztrati.
v bootstrapu mam:
Uri::$defaultPorts['http'] = 8080; // aby autoCanolizace zachovala port
$router[] = new Route('//admin.example.com/<presenter>/<action>/<id>', ...);
problem nastava v Route::constructUrl(), kde v $sequence[0] je jen adresa „//admin.example.com/“ bez portu.
Editoval Ondrej (13. 7. 2009 15:11)
- Ondřej Mirtes
- Člen | 1536
Jde ti o HTTPS? Jako třetí parametr routy uveď konstantu
IRouter::SECURED
.
- David Grudl
- Nette Core | 8228
To Uri::$defaultPorts['http'] = 8080;
by tam určitě být
nemělo. Nezpůsobuje právě tohle zmíněný problém?
- Ondrej
- Člen | 110
David Grudl napsal(a):
To
Uri::$defaultPorts['http'] = 8080;
by tam určitě být nemělo. Nezpůsobuje právě tohle zmíněný problém?
v tom problem neni, nastaveni defaultniho portu tam musi byt pokud se pouziva canonicalize, protoze ta zohlednuje tento nastaveny port pri presmerovani na spravnou URL.
Problem pri generovani URL z routy je takovy, ze routa si nikde neuchova port, resp. si ani nijak neoznaci cast retezce, ktery oznacuje host. Vse jsou jen stringy v $sequence. Routa se spravne matchne na URL ve tvaru admin.example.com:8080/presenter/action , akorat zpet se nevygeneruje puvodni URL, ale pouze admin.example.com/presenter/action
- Ondrej
- Člen | 110
OK, defaultPort jsem nechal vychozi 80, ale tim vznikla dalsi chyba pri generovani odkazu, ktera ale souvisi s vyse popsanym problemem generovani URL.
Ted nefunguje vygenerovani relativni URL, protoze v $hostUri je
admin.example.com:8080 a v $uri je admin.example.com a proto se vygeneruje
neplatny odkaz admin.example.com.
http://code.google.com/…resenter.php#1056
(nastavenim defaultPorts[‚http‘]=8080 jsem alespon vyresil relativni
generovani URL)
- Ondrej
- Člen | 110
nakonec jsem to vyresil takto:
do Route.php jsem pridal:
public function match(IHttpRequest $httpRequest)
{
$this->host = $httpRequest->getUri()->getHost();
$this->port = $httpRequest->getUri()->getPort();
...
}
public function constructUrl(PresenterRequest $appRequest, IHttpRequest $httpRequest)
{
...
do {
if($sequence[$i] == '//'.$this->host.'/') $uri = '//'.$this->host . ':' . $this->port . '/' . $uri;
else $uri = $sequence[$i] . $uri;
if ($i === 0) break;
...
}
Nyni vse funguje: generovani odkazu, redirect i canonicalize :)
Routa je ve tvaru:
$router[] = new MySmartRoute('//admin.example.com/<presenter>/<action>/<id>', ...);
- Ondřej Brejla
- Člen | 746
A kdyby si to nechal tak jak si to měl předtím a routu by si měl ve tvaru:
$router[] = new MySmartRoute('//admin.example.com:8080/<presenter>/<action>/<id>', ...);
Tak by se to chovalo jak? Pro zajímavost…