Routování – redirect NEnetovských rout
- Jack06
- Člen | 168
Zdravím lidičky, chci se zeptat, jak byste řešili nejlépe přeroutování. Mám starou aplikaci, psaná ještě v nativním php, má url například:
/clanky/recenze/12589-soutez-na-aerodrome-festival.html
/slovnik/3063-con.html
Takovýchto odkazů je strašná spousta. Aplikace se nyní předělává do nette, kde budou mít články již jiná rozdělení. Budou nově patřit do jiných kategorií, ale jde mi o to, jak zachovat „funkčnost“ starých odkazů. Nejlépe bych potřeboval, aby si to časem vyhledávače přeindexovaly na nové url a nebraly to jako 2 stránky s totožným obsahem.
Předem děkuji za nápady
- frosty22
- Člen | 373
Tak nejpodstatnější je najít rozdíl ve schématu původní URL na novou, a potom bych to řešil podle možností, buď přes HTACCESS a co nejde přes něj, tak třeba přes nějakou action v presenteru či přes routu.
Již jsem mapoval takto pár dost rozsáhlých webů a v podstatě třeba pokud jde nějak regulárem podchytit původní URL adresa, tak aby se nematchnula ta nová, pak HTACCESS. Pokud ale v té nové potřebuješ i ty nové kategorie jak píšeš, tak pak se neobejdeš bez interakce v PHP.
- Jde odchytit regulárem schéma, pak napíšeš regulár v té routě, a přes FilterIn, FilterOut v routování, převedeš na novou URL a ještě přidáš Route::ONE_WAY, viz jednosměrky – https://doc.nette.org/…tion/routing
- Regulár matchuje původní URL i nová URL, schéma nelze jednoznačně odlišit, pak bych asi udělal tu routu jako poslední, která bude odchytávat naprosto vše přidal bych jí opět FilterIn, FilterOut a ještě Route::FILTER_STRICT, kdy když vrátíš NULL, tak by to mělo routu přeskočit a jít na 404ku.
V těch filterIn, FilterOut již musíš dokázat převádět z původních URL na nová a to buď nějakým vyparsováním, třeba ID a sloužit novou a pokud ani tohle by nešlo, kvůli třeba změně IDček a kompletní refaktorizaci projektu, či třeba převodu kategorií apod. Pak při reimportu ze staré databáze do nové si musíš třeba vytvořit tabulku „routes_bc“ kde budeš mít sloupce oldUrl a newUrl třeba a převádět takto.