Cela n’a pas fonctionné comme prévu car la partie slug de l’URL a été générée dans le script de migration légèrement différemment par rapport à l’ancien logiciel.
J’ai donc « normalisé » l’URL moi-même.
Ajouter/générer des URLs normalisées (Table des permaliens Discourse)
Dans le champ URL, récupérer :
forum/t140842-s1/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html
ou
forum/t140842-s2/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html
ou
forum/t140842/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html
et les convertir en une URL simple ne contenant que l’ID de l’ancien sujet :
forum/t140842
Cela est réalisé par une commande SQL qui réécrit l’URL via la fonction 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;
Réécrire les anciennes requêtes via .htaccess sur l’ancien domaine
RewriteRule ^forum/t([0-9]*)(-?.*)/(.*)$ https://discourse-domain.com/forum/t$1 [R=301,L]
Que se passe-t-il ici ?
Google a indexé et pointe vers l’URL https://old-domain.com/forum/t140842/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html. J’ai eu la chance que cette requête aboutisse sur un serveur Apache en raison d’un domaine différent, ce qui m’a permis d’utiliser .htaccess pour une réécriture simple. Je réécris donc cette requête vers https://discourse-domain.com/forum/t140842. Dans la table des permaliens, j’ai ajouté cet enregistrement forum/t140842 en utilisant le permalien déjà existant avec l’URL complète comportant le slug, grâce à une expression régulière (voir ci-dessus).
J’espère que cela aidera quelqu’un d’autre comme point de départ.