Non ha funzionato come previsto perché la parte slug dell’URL è stata generata nello script di migrazione in modo leggermente diverso rispetto al vecchio software.
Quindi ho “normalizzato” l’URL da solo.
Aggiungere/generare URL normalizzati (Tabella Permalink di Discourse)
Nel campo URL, trasformare
forum/t140842-s1/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html
o
forum/t140842-s2/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html
o
forum/t140842/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html
in un URL semplice contenente solo l’ID del vecchio argomento:
forum/t140842
Questo viene eseguito tramite un comando SQL che riscrive l’URL utilizzando la funzione REGEXP_REPLACE:
INSERT INTO permalinks (created_at, updated_at, topic_id, url) SELECT NOW(), NOW(), topic_id, REGEXP_REPLACE(url,'forum/t(\d*)(-?.*)/(.*)','forum/t\1','') url FROM permalinks WHERE topic_id > 0 ON CONFLICT DO NOTHING;
Riscrivere le vecchie richieste tramite .htaccess sul vecchio dominio
RewriteRule ^forum/t([0-9]*)(-?.*)/(.*)$ https://discourse-domain.com/forum/t$1 [R=301,L]
Cosa succede qui?
Google ha indicizzato e sta linkando all’URL https://old-domain.com/forum/t140842/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html. Ho avuto la fortuna che questa richiesta fosse gestita da un server Apache a causa di un dominio diverso, permettendomi di utilizzare .htaccess per una riscrittura semplice. Sto quindi riscrivendo questa richiesta in https://discourse-domain.com/forum/t140842. Nella tabella dei permalink ho aggiunto il record forum/t140842 utilizzando il permalink già esistente con l’URL completo contenente lo slug, tramite una regex (vedi sopra).
Spero che questo possa essere d’aiuto ad altri come punto di partenza.