Přesměrování adresy s neexistujícími parametry
- Siam
- Člen | 54
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
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);
}
}