Přesměrování adresy s neexistujícími parametry

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

Dobrý den,
mám problém s tím, že nette akceptuje adresy a neexistujícími parametry a vznikají kvůli tomu duplicity. Je to bug, nebo mám nedostatečně nastavený router? Podle dokumentace jsem pochopil, že by takové adresy mělo nette automaticky přesměrovat na skutečnou adresu, ale neděje se tak. Používám jednoduché routování typu:

<?php
$router[] = new Route('foo/<bar>', 'Presenter:action');
?>

Pokud někdo ale zadá třeba adresu končící na ?foo=bar, tak se mu zobrazí stránka, tak jako kdyby ta adresa s tím koncem byla správná, takže vznikne ošklivá duplicita.

Jde nějak univerzálně nastavit aby se adresy s nepotřebnými parametry přesměrovávali na správné adresy uvedené v routeru? Používám nette verzi 2.0.11

Ještě horší je, pokud je na konci parametr do na signál, který neexistuje, to pak vyhodí 403, což je také dost nepříjemné. Jde se zbavit i toho? Chtěl bych místo toho házet 404ku.

David Matějka
Moderator | 6445
+
0
-

neni to bug ani nedostatecne nastaveny router – tohle nette proste nedela. v query stringu jsou proste dalsi parametry, pro ktere neni misto v masce – prave treba zminene „do“ pro signal (samozrejme i to muze byt v masce, vetsinou tam ale neni).
je ale asi opravneny pozadavek, aby se pro routu nechalo nastavit, jake parametry v query stringu bude akceptovat – muzes pripravit pull request :)
zatim si to asi budes muset vyresit nejak rucne – bud podedit Route a nejak upravit, nebo pokud ti jde o unikatnost pro vyhledavace, tak pouzi <link rel="canonical" ...>

a pro tu 403: prepis si metodu metodu signalReceived v presenteru:

public function signalReceived($signal)
{
	try {
		parent::signalReceived($signal);
	} catch(Nette\Application\UI\BadSignalException $e) {
		throw new Nette\Application\UI\BadSignalException($e->getMessage(), 404);
	}
}