znak „]“ v masce redirectu

radekbr
Člen | 3
+
0
-

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

Nette ten znak považuje za součást regexu, zkus ho vložit encoded (%5B).

Kamil Valenta
Člen | 752
+
0
-

A napsat tu routu jako obecnou, kde se bude zachytávat celá URL a vyhodnocovat ji ve filtrační funkci nechceš?

radekbr
Člen | 3
+
0
-

Marek Bartoš napsal(a):

Nette ten znak považuje za součást regexu, zkus ho vložit encoded (%5B).

Přesně tohle mě napadlo, bohužel ani to nefunguje.

radekbr
Člen | 3
+
0
-

Kamil Valenta napsal(a):

A napsat tu routu jako obecnou, kde se bude zachytávat celá URL a vyhodnocovat ji ve filtrační funkci nechceš?

Chci cokoliv co bude fungovat :D Nemáš prosím nějaký příklad?

Marek Bartoš
Nette Blogger | 1146
+
0
-

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 | 752
+
0
-
$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…