Proč se zobrazuje: Redirect – Please click here to continue
- Inza
- Člen | 330
Mám dotaz:
stáhnul jsem nejnovější revizi Nette z repozitáře (e1a3fa8ef60ce6b8b7089ac153c1cf23eac1e251, za Mon Nov 15 15:32:37 2010) a aplikace, která mi dříve fungovala (také na verzi Nette 2-dev), se mi nyní místo všech přesměrování zastaví a vypíše bílou obrazovku z nadpisem Redirect a pod tím je odkaz „Please click here to continue“, ve kterém je URL na kterou ten redirect vede, ale bez absolutní části.
Nikdy dříve jsem tuto obrazovku v Nette neviděl, takže mě to dost překvapilo… Googlil jsem to zde i na fóru a jediné dva related posty, co jsem k tomu našel jsou:
A z nich jsem toho moc nevyčetl…
Nevíte, kde by mohl být problém? Je nějaký bug v repozitáři, nebo dělám něco špatně? Nebo za jakých okolností Nette takovouto hlášku produkuje?
Díky za případné odpovědi…
- Inza
- Člen | 330
Vyki napsal(a):
Mě se stalo to samé když jsem chtěl přesměrovat s chybou 401. Jinak když param $code nevzplním běhá to v pohodě.
Ale param code je v redirectu první argument, ne? Jak ho můžeš nevyplnit? (jako vím že je tam to chování, že když bude první parametr nečíslo, tak ho to přeskočí, to máš na mysli?)
Jinak mě se to projevuje tehdy, když v presenteru volám:
$this->redirect('index');
Tedy přesměrovávám na jinou akci téhož presenteru.
Jinak tobě se to také děje pouze s tou nejnovější revizí Nette? Jak jsem řekl, toto mi dříve fungovalo bez problémů…
EDIT: A tedy děje se mi to u všech redirectů – to výše je pouze příklad jejich volání, ale u všech odkazuji na jinou akci téhož presenteru…
Editoval Inza (20. 11. 2010 12:34)
- Aurielle
- Člen | 1281
Dělá to funkce redirect v HttpResponse, ten výstup se posílá, když selže redirect pomocí HTTP hlavičky Location: https://api.nette.org/…nse.php.html#150
- na1k
- Člen | 288
Taky jsem na to narazil a celkem jsem nechápal. Jednou to bylo při pokusu přesměrovávat s chybovým kódem a podruhé při snaze přesměrovat ve chvíli, kdy už bylo na přesměrování hlavičkami pozdě. Nevylučuju, že jsem měl chybu ještě někde jinde, ale přebral jsem si to tak, že to je mechanismus na přesměrování ve chvíli, kdy už jsou odeslané hlavičky. Ruku do ohně bych za to ale nedal :-|
- Inza
- Člen | 330
Jasné, a nějaké návrhy na to jak to poladit tak aby se mi zase místo těchto stránek provádělo normální přesměrování?
Navíc ten odkaz pod tím nefunguje – v URL chybí její absolutní část… – což je IMHO možná i důvod proč selže přesměrování tou hlavičkou.
Ale tu URL generuje Nette – myslíte že je možné, že by to bylo v té aktuální revizi rozbité? Ptz mě nenapadá jak bych něco takového mohl rozbít já, když jsem v souborech frameworku nic neměnil a na předchozí verzi (teď nevím jaká revize, ale opět se jedná o snapshot z repozitáře pro 2-dev) mi ta stejná věc funguje…
BTW běží aktuálně někomu redirectování na té stejné revizi, co používám já? Aktuálně nejnovější v repu…
- arron
- Člen | 464
Taky se mi to stalo a je to takove divne…veskere redirecty vedou nakonec k funkci redirect ve tride HttpResponse:
public function redirect($url, $code = self::S302_FOUND)
{
if (isset($_SERVER['SERVER_SOFTWARE']) && preg_match('#^Microsoft-IIS/[1-5]#', $_SERVER['SERVER_SOFTWARE']) && $this->getHeader('Set-Cookie') !== NULL) {
$this->setHeader('Refresh', "0;url=$url");
return;
}
$this->setCode($code);
$this->setHeader('Location', $url);
echo "<h1>Redirect</h1>\n\n<p><a href=\"" . htmlSpecialChars($url) . "\">Please click here to continue</a>.</p>";
}
Kdyz na to tak koukam…pokud uz jsou odeslane hlavicky tak funkce
$this->setHeader()
vyhazuje vyjimku. Takze predcasne odeslanyma
hlavickama to nebude. Cili pokud se zobrazi ta hlaska, co je vypsana tim echem,
tak se zda, ze spis prohlizec sice vsechno prijal, ale z nejakeho duvodu to
nezpracoval. No, ale spis tak premyslim nahlas, nez ze bych vedel co
s tim…
Zkouseli jste to s ruznymi prohlizeci?
- Filip Procházka
- Moderator | 4668
dělá mi to taky
nepřesměrovává vůbec nikde v aplikaci (auto-kanonizace je tím
zabitá)
http://www.unired.loc/
→ http://www.unired.loc/cs/
přesměrovává všechno v pořádku
http://www.unired.cz/ → http://www.unired.cz/cs/
- David Grudl
- Nette Core | 8282
- použijte úplně poslední verzi Nette
- je ta URL správně sestavená? Jakou URL vidíte ve zdrojovém kódu?
- vydumpujte Environment::getHttpRequest()->getUri()
- vydumpujte $_SERVICE
- Filip Procházka
- Moderator | 4668
Url je ok vygenerovaná vždy ok, tady jsou dumpy http://www.kdyby.org/…ad/redirect/
- Inza
- Člen | 330
Ha, už to možná mám:-)
Já používám moduly, možná je to tím. Mě pomohlo, když jsem do redirectů přidal na začátek dvě lomítka. Možná je to tím, že když použiju moduly tak Nette ty lomítka vyžaduje, aby tam dalo absolutní URL… Může to být tím?
Mě každopádně ta dvě lomítka pomohla;-).
- Inza
- Člen | 330
gmvasek napsal(a):
A přesměrováváte mezi moduly nebo v rámci modulu… ? Každopádně já používám 2.0-alpha2 a ještě jsem tohle ani jednou neviděl… :/
Mezi moduly i v rámci modulu (jakmile jsem začal používat moduly tak se problém objevil), ale jak jsem psal, mě pomohlo všude uvést dvě lomítka před předpis redirectu…
- bojovyletoun
- Člen | 668
Mě se teda tohle stávalo, při špatně nastaveném routeru, chybějícím mod_rewrite a/nebo špatném .htaccessu(vyjímečně, na tom se toho nedá moc zkazit) – aplikace se dostala do smyčky.
- pepakriz
- Člen | 246
Mezi moduly i v rámci modulu (jakmile jsem začal používat moduly tak se problém objevil), ale jak jsem psal, mě pomohlo všude uvést dvě lomítka před předpis redirectu…
Jak tedy přesměrováváš z presenteru?
$this->redirect("this");
i
$this->redirect("//this");
Obojí mě přivede na stránku s redirectem.
- pepakriz
- Člen | 246
Právě jsem zjistil, že v případě nastavení
Debug::$strictMode = false;
se stránka s redirectem neobjevuje.
Naopak s hodnotou true ano. Z toho bych usuzoval, že ve strict módu nastane
nějaká chyba, díky které nedojde k přesměrování. Jenže když
$this->redirect();
zakomentuju, tak laděnka žádnou chybu
nehlásí. Teď jsem už kompletně zmaten.
- Filip Procházka
- Moderator | 4668
Jen tak mezi náma, ať řesměrováváš mezi moduly, nebo ne, je úplně
jedno jestli na začátek napíšeš „//
“. Jediné, co ty dva
znaky dělají je, že ti přidají doménu do vygenerované adresy. Pokud
nepotřebuješ uživatele přesměrovávat mezi subdoménami, je to víceméně
zbytečné.
V první řadě, doporučuji aktualizovat Nette :) To samo o sobě vyřeší skoro vždy část problému.
Když budu mít moduly
Front:Sub1:Sub2:Sub3:Presenter1
Front:Sub1:Sub2:Presenter2
Admin:Sub4:Presenter3
Admin:Sub5:Presenter4
Admin:Sub5:Presenter5
O modul výš z Front:Sub1:Sub2:Sub3:Presenter1
? Musím
absolutně
$this->redirect(':Front:Sub1:Sub2:Presenter2:default');
O modul hlouběji z Front:Sub1:Sub2:Presenter2
? Můžu
relativně
$this->redirect('Sub3:Presenter1:default');
Stejné zamoření z Admin:Sub4:Presenter3
? Jiný modul, musím
absolutně
$this->redirect(':Admin:Sub5:Presenter4:default');
Stejný modul z Admin:Sub5:Presenter4
? Můžu relativně
$this->redirect('Presenter5:default');
na něco jsem zapoměl? :)
Editoval HosipLan (20. 1. 2011 18:54)
- iguana007
- Člen | 970
EDIT: to co jsem se snažil udělat je blbost, proto prosím tento post ignorujte
Včera jsem narazil na stejný problém. A to v error presenteru –
potřebuju z něj směrovat na jinou stránku s kódem 301, 404 nebo 500.
S 301 to funguje v pohodě, ale když dám do redirectu 404 nebo 500, tak to
nejede a zobrazí se právě ta stránka:
<h1>Redirect</h1>
<p><a href="http://localhost/...neco.../error-custom/">Please click here to continue</a>.</p>
//funguje a přesměruje správně
$this->redirect(301,'ErrorCustom:');
//nefunguje - zobrazí pouze čistou stránku s redirect odkazem
$this->redirect(404,'ErrorCustom:');
//nefunguje - zobrazí pouze čistou stránku s redirect odkazem
$this->redirect(501,'ErrorCustom:');
Zkoušel jsem to jak na starší verzi na které mi projekt jede, ale i na včera stažené verzi: 2.0-dev bb2b723 released on 2011–02–06 a 2.0-dev 7616569 released on 2011–03–10
Editoval iguana007 (11. 3. 2011 11:06)
- Filip Procházka
- Moderator | 4668
Ale v redirectu se přece uvádí kód s jakým se má přesměrovat. Né kód který má vrátit. 404 je nějaký kód přesměrování?
https://en.wikipedia.org/…_redirection#…
$this->redirect('ErrorCustom:404')
Editoval HosipLan (11. 3. 2011 11:03)