Reindirizzamenti con htaccess
Uno degli aspetti più intriganti che mi è capitato nella mia avventura di migrazione da WordPress a Hugo è quella dei reindirizzamenti dei post da un permalink a un altro.
Nella precedente installazione di WordPress la struttura dei permalink era la seguente:
https://www.aldolat.it/<ANNO>/<CATEGORIA>/<TITOLO-DEL-POST>/
In Hugo ho deciso di cambiarla togliendo <CATEGORIA>/ dall’indirizzo e premettendovi posts/:
https://www.aldolat.it/posts/<ANNO>/<TITOLO-DEL-POST>/
lasciando così la stessa struttura in cui sono organizzati file e directory nel mio filesystem.
Chiaramente questo significa che il vecchio indirizzo non funziona più e genera un errore 404. Ma è possibile intervenire con una regola nel file .htaccess piuttosto semplice. Eccola.
RedirectMatch 301 ^/(\d{4})/(.*)/(.*)/$ https://www.aldolat.it/posts/$1/$3
Questo è quello che fa la regola, la quale utilizza mod_alias, il sistema più semplice per reindizzare cose, rispetto a mod_rewrite, più potente ma un pelo più complesso:
RedirectMatch: attivamod_aliasper il reindirizzamento.301: applica una stato HTTP di Moved Permanently.^/(\d{4})/(.*)/(.*)/$: contiene la stringa da cercare. In questo caso si tratta di una regex che in sostanza dice questo: trova una stringa che inizia (^) con/(quattro numeri)e prosegue con due parti contenenti qualsiasi carattere e delimitate con slash (/) e queste due parti sono la parte finale della stringa ($). Fate attenzione alle parentesi tonde, in quanto queste saranno considerate damod_aliascome variabili che si possono usare per il reindirizzamento. Le variabili saranno numerate sequenzialmente damod_aliasa partire da1.https://www.aldolat.it/posts/$1/$3: reindirizza ciò che hai trovato all’indirizzo indicato, sostituendo le variabili$1e$3in questo modo:$1: fa riferimento al primo gruppo di parentesi tonde, vale a dire(\d{4});$3: fa riferimento al terzo gruppo di parentesi tonde, vale a dire(.*).
Il risultato sarà quindi che un indirizzo del tipo:
<https://www.aldolat.it/2012/news/htaccess-made-easy/>
verrà reindirizzato a:
<https://www.aldolat.it/posts/2012/htaccess-made-easy/>