No funcionó como se esperaba porque la parte del slug de la URL se generó en el script de migración de manera ligeramente diferente a como lo hacía el software antiguo.
Así que “normalicé” la URL por mi cuenta.
Agregar/generar URLs normalizadas (Tabla de enlaces permanentes de Discourse)
En el campo de la URL, transformar:
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
en una URL simple que contenga solo el ID del tema antiguo:
forum/t140842
Esto se logra mediante un comando SQL que reescribe la URL utilizando la función 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;
Reescribir solicitudes antiguas mediante .htaccess en el dominio antiguo
RewriteRule ^forum/t([0-9]*)(-?.*)/(.*)$ https://discourse-domain.com/forum/t$1 [R=301,L]
¿Qué ocurre aquí?
Google ha indexado y está enlazando a la URL https://old-domain.com/forum/t140842/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html. Tuve la suerte de que esta solicitud llegara a un servidor Apache debido a un dominio diferente, lo que me permitió utilizar .htaccess para reescribirla fácilmente. Así que estoy reescribiendo esta solicitud a https://discourse-domain.com/forum/t140842. En la tabla de enlaces permanentes, añadí el registro forum/t140842 utilizando el enlace permanente ya existente con la URL completa con slug, mediante una expresión regular (véase arriba).
Espero que esto sirva de punto de partida a alguien más.