přesměrování nezohledňuje port
- Honza Marek
- Člen | 1664
Pokud mi aplikace běží na http://localhost:8081/aplikace, tak pokud se v presenteru přesměrovávám metodou redirect na jiný presenter nebo view, tak zmizí port z adresy (http://localhost/aplikace/presmerovano).
- Honza Marek
- Člen | 1664
$router[] = new Route('admin/<presenter>/<action>/<id>', array(
'module' => 'Admin',
'presenter' => 'Homepage',
'action' => 'default',
'id' => null
));
Pak mám ještě nějaké pro FrontModule, ale v něm nepřesměrovávám.
- David Grudl
- Nette Core | 8228
To je zvláštní, protože by se měly generovat absolutní cesty, tj. jen „/aplikace/presmerovano“.
Máš aktuální verzi Nette? Nemůže být chyba někde jinde?
- Honza Marek
- Člen | 1664
Nefunguje to ani v nejnovější verzi nette.
Když budu střílet hodně od boku, nemohlo by to souviset s úpravou nette proti IE7 bug – URL tvaru //example.com/path/, content-type header?
- David Grudl
- Nette Core | 8228
Honza M. napsal(a):
Nefunguje to ani v nejnovější verzi nette.
Když budu střílet hodně od boku, nemohlo by to souviset s úpravou nette proti IE7 bug – URL tvaru //example.com/path/, content-type header?
Tato změna se týká cest, které jsou zadány včetně domény, tj. třeba
$router[] = new Route('//example.com/admin/<presenter>/<action>/<id>', ...);
- Honza Marek
- Člen | 1664
Trochu jsem to zkoumal a zjistil jsem:
- opravdu se generují relativní cesty (/aplikace/presmerovano)
- ale v Application se ta cesta absolutizuje
- Uri::getHostUri volá Uri::getAuthority a ta se už vrací bez portu
- a proč, to už jsem nevyzkoumal
- ale pomohlo by, kdyby se cesta neabsolutizovala
Editoval Honza M. (14. 11. 2008 16:44)
- Honza Marek
- Člen | 1664
Hm… $_SERVER["SERVER_PORT"]
mi hlásí 80, přestože apache
poslouchá na 8083. Nevím proč.
- David Grudl
- Nette Core | 8228
Díky za prozkoumání, tohle mi nedošlo. Absolutizace se provádí kvůli striktnímu chování podle HTTP normy, teoreticky by ji bylo možné odstranit, ale to není řešení problému, že. Můžeš zkusit vypsat phpinfo() a zjistit, jestli správný port není zjistitelný nějak jinak? Nebo ještě zkusit apache_* funkce v PHP?
- Honza Marek
- Člen | 1664
Z apache funkcí vypadá nadějně apache_request_headers. Vrací pole, kde pod klíčem
"Host"
mám "localhost:8083"
.
Anebo jednodušeji v proměnné $_SERVER["HTTP_HOST"]
mám to
samé.
Editoval Honza M. (15. 11. 2008 9:59)
- Honza Marek
- Člen | 1664
No, nemám už ten počítač, na kterém mi to zlobilo.
Zkusil jsem to ale nasimulovat a zjistil jsem, že to funguje jen při správném nastavení ServerName (host:port) v httpd.conf. Tak si teď myslím, že chyba byla nejspíš tady.