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_alias
per 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_alias
come variabili che si possono usare per il reindirizzamento. Le variabili saranno numerate sequenzialmente damod_alias
a partire da1
.https://www.aldolat.it/posts/$1/$3
: reindirizza ciò che hai trovato all’indirizzo indicato, sostituendo le variabili$1
e$3
in 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: