URL-адреса моего старого форума имеют вид /posts/t{topic_id}-{url_slug}.
Я использовал Permalink в Discourse для сопоставления старых URL-адресов форума с новыми URL-адресами Discourse.
Проблема заключается в том, что маршрутизатор Rails перенаправляет запросы для старых URL-адресов форума на один из маршрутов, связанных с ресурсом “posts”. (Я не знаю, какой именно маршрут.)
Нормализация Permalink выполняется после завершения маршрутизации, поэтому это не решение.
Я считаю, что решение состоит в том, чтобы добавить пользовательский маршрут в config\routes.rb, чтобы пропустить обработку запроса контроллером PostsController, если URL-адрес имеет вид /posts/t{topic_id}-{url_slug}, но я недостаточно хорошо разбираюсь в маршрутизации Rails, чтобы внести это изменение. Или, возможно, это не тот путь?
Как они выглядят? Какие постоянные ссылки вы добавили?
Форум уже запущен или вы ещё можете запустить скрипт импорта? (На самом деле, вы можете написать Ruby-скрипт, который можно запустить в Rails, чтобы добавить постоянные ссылки, подобные тем, что я описал.)
Думаю, вам стоит сделать ваши постоянные ссылки похожими на /oldforum/{topic_id}, а затем добавить конфигурацию в nginx, чтобы перехватывать URL-адреса вида /posts/t и перенаправлять их на /oldforum/{topic_id}.
Таким образом (согласно ИИ), вы выполните replace с помощью pups (вскоре вы сможете добавить это в outlet, но я не знаю, когда это произойдёт), чтобы добавить следующее в ваш конфигурационный файл nginx discourse.conf:
# Разместите это внутри блока server {}
location ~ ^/posts/t(?<topic_id>\d+)-.*$ {
# Постоянное перенаправление (301)
return 301 /oldforum/$topic_id;
# Альтернативно, для временного перенаправления (302) используйте:
# return 302 /oldforum/$topic_id;
}
Я бы протестировал это, вручную внося эти изменения внутри контейнера, а затем, двигаясь в обратном направлении, добавил бы их в ваш файл app.yml.
Я выяснил, что это решение может не сработать, поскольку цепочка перенаправлений повлияет на SEO-рейтинг сайта. Для перехода к самому посту требуется два перенаправления 301 и три запроса.
А затем позволить Permalink обработать запрос. Звучит так, будто это должно сработать, но я не уверен.