znak „]“ v masce redirectu
- radekbr
- Člen | 3
Zdravím,
původně jsem měl redirecty klasicky v htaccess, ale rozhodl jsem se je
předělat do Nette.
Udělal jsem si RouterFactory, kde přidávám redirecty.
Funguje to dobře, až na případ, kdy v půdovodní url se objeví znak
„]“.
` $router[] = new \Nette\Application\Routers\Route(‚/puvodni-url]‘, static
function ($presenter) {
return $presenter->redirectUrl(‚/‘, 301);
}`
Vyhodí to chybu:
`Missing ‚[‘ in mask `
Ví někdo o nějakém způsobu jak tohle zprovoznit?
- Marek Bartoš
- Nette Blogger | 1263
Nette ten znak považuje za součást regexu, zkus ho vložit encoded
(%5B
).
- Kamil Valenta
- Člen | 815
A napsat tu routu jako obecnou, kde se bude zachytávat celá URL a vyhodnocovat ji ve filtrační funkci nechceš?
- Marek Bartoš
- Nette Blogger | 1263
Můžeš zkusit ještě escapování \[
. Ale tuším, že to
nikdo nikdy nepotřeboval a tak to prostě nefunguje :'D
'/<path .+>'
takto bys zapsal routu která matchne cokoli.
Můžeš pak takové edge cases zpracovat v handleru routy (presenter, pokud
používáš nette/application)
- Kamil Valenta
- Člen | 815
$router[] = new Route('/<url .+>', [
'presenter' => 'Redirect',
'action' => 'default',
NULL => array(
Route::FILTER_IN => function (array $params) {
return $this->filterRedirectIn($params);
}
),
]);
public function filterRedirectIn($params)
{
if ($params['url'] == 'puvodni-url]') {
return $params;
} else {
return null;
}
}
Jedoduchý RedirectPresenter to pak ve své actionDefault bude redirectovat…