Proč se zobrazuje: Redirect – Please click here to continue

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

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…

Vyki
Člen | 388
+
0
-

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ě.

Inza
Člen | 330
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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…

Chbox
Člen | 125
+
0
-

hlasím stejný problém na Alpha2
např:

$this->redirect('this');

Dá se s tím něco dělat? jinak by se Alpha2 měla stáhnout z distribuce minimálně.

Editoval Chbox (20. 11. 2010 14:57)

kravčo
Člen | 721
+
0
-

stáva sa to ak sa odošle niečo na výstup pred presmerovaním (nejaké echo, BOM, …)

jansfabik
Člen | 193
+
0
-

To by vyhodilo výjimku (a laděnku). Nebo se mýlím?

arron
Člen | 464
+
0
-

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?

kravčo
Člen | 721
+
0
-

jansfabik napsal(a):

To by vyhodilo výjimku (a laděnku). Nebo se mýlím?

Áno (na striktné vyhadzovanie výnimky som zabudol).

Podľa kódu funkcie redirect vypíše Nette hlášku vždy.

Inza
Člen | 330
+
0
-

Jo zkoušel, hlavně prostě u starší revize mi to nedělá. V aplikaci nic nezměním a v té nové to prostě nefunguje…

David Grudl
Nette Core | 8282
+
0
-

Na jaké URL to přesně běží?

Filip Procházka
Moderator | 4668
+
0
-

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
+
0
-

Zkuste poslední revizi.

Filip Procházka
Moderator | 4668
+
0
-

bez rozdílu

David Grudl
Nette Core | 8282
+
0
-
  1. použijte úplně poslední verzi Nette
  2. je ta URL správně sestavená? Jakou URL vidíte ve zdrojovém kódu?
  3. vydumpujte Environment::getHttpRequest()->getUri()
  4. vydumpujte $_SERVICE
Filip Procházka
Moderator | 4668
+
0
-

Url je ok vygenerovaná vždy ok, tady jsou dumpy http://www.kdyby.org/…ad/redirect/

pepakriz
Člen | 246
+
0
-

Problém se projevuje i na poslední revizi. Existuje řešení této chyby?

Inza
Člen | 330
+
0
-

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;-).

pepakriz
Člen | 246
+
0
-

Mě se tato hláška objevuje i u přesměrování pomocí rout (například když se doplňují do URL defaultní proměnné). Také používám moduly.

Aurielle
Člen | 1281
+
0
-

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… :/

Inza
Člen | 330
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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)

pepakriz
Člen | 246
+
0
-

Řekl bych, že jsem přišel na jádro problému. v /libs/ mě chyběla složka „client-side“, díky které havaroval debug panel. Nyní i se strict módem vše funguje jak má.

iguana007
Člen | 970
+
0
-

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
+
0
-

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)

iguana007
Člen | 970
+
0
-

OK, tak díky hosiplanovi vyřešeno – to co jsem se snažil udělat je blbost …

simPod
Člen | 383
+
0
-

mam stejny problem, akorat nechapu to reseni. Muze to nekdo prosim vysvetlit? Diky

Aurielle
Člen | 1281
+
0
-

Že nemůžeš přesměrovávat pod kódem jiným než 3XX (301, 302).