Не сработало как ожидалось, потому что часть URL (slug) была сгенерирована в скрипте миграции немного иначе, чем в старом программном обеспечении.
Поэтому я «нормализовал» URL самостоятельно.
Добавление/генерация нормализованных URL (таблица пермалинков Discourse)
В поле URL преобразуйте:
forum/t140842-s1/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html
или
forum/t140842-s2/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html
или
forum/t140842/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html
в простой URL, содержащий только ID старой темы:
forum/t140842
Это выполняется с помощью SQL-команды, которая переписывает URL с помощью функции 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;
Переписывание старых запросов через .htaccess на старом домене
RewriteRule ^forum/t([0-9]*)(-?.*)/(.*)$ https://discourse-domain.com/forum/t$1 [R=301,L]
Что здесь происходит?
Google проиндексировал и ссылается на URL https://old-domain.com/forum/t140842/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html. Мне повезло, что этот запрос попал на сервер Apache из-за другого домена, поэтому я мог легко использовать .htaccess для переписывания. Таким образом, я переписываю этот запрос в https://discourse-domain.com/forum/t140842. В таблицу пермалинков я добавил запись forum/t140842, используя уже существующий пермалинк с полным URL (с слагом), применив регулярное выражение (см. выше).
Надеюсь, это поможет кому-то другому как отправная точка.