Redirect stare adresy na novou

turbo80
Člen | 50
+
0
-

Zdravim,
potrebuji poradit mam stary web a tam jsou adresy
domena.tld/kategorie/neco samozrejmen tam neni jen /kategorie/…
a ja potrebuji presmerovat trvale (301) na novou adresu
domena.tld/neco

nevim jestli to resit na strane routru nebo vytvorit redirect funkci v nem nacteni

public function redirect()
{
	$url = new Nette\Http\Url;
	$data = $url->getPath();
	$row = $this->database('redirect')->where('url',$data);

	if(!$row)
	{
		$this->error(); //404
	}

	$this->redirectPermanent($row['url']);
}

tuto fci bych pouzil v routru

    public function createRouter()
    {
        $router = new RouteList;

        $router[] = new Route('admin/[<locale=cz cz|en>/]<presenter>/<action>[/idParent=null][/uroven=0]', array(
			'module' => 'Backend',
			'presenter' => 'Homepage',
			'action' => 'default'
		));

        $router[] = new Route('[<url>]', [

            null => [
                Route::FILTER_IN => function (array $params) {

                    \Tracy\Debugger::barDump($params['url'], 'url filtrer_in');

                    $row = $this->database->table('router')
                        ->where('url', $params['url'])
                        ->order('url ASC')
                        ->fetch();

                    if($params['url'] == NULL)
                    {
                        return [
                            'presenter' => 'Front:Homepage',
                            'action' => 'default',
                            'locale' => 'cz',

                        ];
                    }

                    if (!$row)
                    {
                        return NULL;
                    }





                    return [
                        'presenter' => 'Front:'.$row->presenter,
                        'action' => $row->action,
                        'url' => $row['url'],
                        'locale' => 'cz',
                    ];
                },
                Route::FILTER_OUT => function (array $params) {

                    $row = $this->database->table('router')
                        ->where('presenter', $params['presenter'])
                        ->where('action', $params['action'])
                        ->order('url ASC')
                        ->fetch();

                    if (!$row)
                    {
                        return NULL;
                    }



                    return [
                       // 'locale' => $params['locale'],
                        'url' => $row->url,
                        'id' => isset($params['id']) ? $params['id'] : null,
                    ];
                },
            ],
        ]);

        #$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
        return $router;
    }

vsem moc dekuji za pripadne rady…

Editoval turbo80 (25. 10. 2020 21:23)

turbo80
Člen | 50
+
0
-

Opravdu nikdo netuší jak na to, už si nevím rady. Případně mě poraďte jak případně celý router předělat. Ještě jednou všem děkuji za případné rady.

dakur
Člen | 493
+
0
-

@turbo80 Já bych použil jednosměrky v routeru, pokud to jen trochu jde. Pokud ne (např. podmíněné přesměrování), pak bych zavolal $this->redirect() v presenteru. Volat redirect ve FILTER_IN se mi nějak nezdá, ale nevím, jak moc je to čisté nebo jestli to vůbec jde.

Jinak se mi teda osobně moc nezdá ukládat si router do databáze, ale možná jsem ještě tento use-case nepotkal.

Editoval dakur (2. 11. 2020 9:48)