您好,
我旧论坛的网址格式为 /posts/t{topic_id}-{url_slug}。
我已经使用 Discourse 的永久链接(Permalink)将旧论坛网址映射到了新的 Discourse 网址。
问题在于,Rails 路由将对旧论坛网址的请求路由到了“posts”资源的一个路由。(我不知道是哪个路由。)
永久链接规范化(Permalink Normalization)是在路由完成后运行的,所以这并不是解决方案。
我认为解决方案是在 config\routes.rb 中添加一个自定义路由,如果网址格式为 /posts/t{topic_id}-{url_slug},则跳过 PostsController 的请求处理。但我对 Rails 路由不够熟悉,无法进行此更改。或者,也许这不是正确的方法?
谢谢。
1 个赞
pfaffman
(Jay Pfaffman)
2
这确实很不幸。
它们看起来是什么样的?您添加的永久链接是什么?
论坛已经上线了吗,还是您仍然可以运行导入脚本?(实际上,您可以编写一个 Ruby 脚本,在 Rails 中运行该脚本来添加我所描述的那种永久链接。)
我认为您可能想让您的永久链接看起来像 /oldforum/{topic_id},然后在 Nginx 中添加一些配置来捕获那些 /posts/t 网址并将它们重定向到 /oldforum/{topic_id}。
所以(根据 AI 的说法),您将使用 pups 进行一次 replace(很快您就可以将其添加到 outlet 中,但我不知道那是什么时候),将以下内容添加到您的 discourse.conf Nginx 配置中:
# 放在您的 server {} 块内
location ~ ^/posts/t(?<topic_id>\d+)-.*$ {
# 永久重定向 (301)
return 301 /oldforum/$topic_id;
# 或者,对于临时重定向 (302),使用:
# return 302 /oldforum/$topic_id;
}
我会通过在容器内手动进行这些更改来测试它,然后反向操作,将更改添加到您的 app.yml 中。
2 个赞

是的,我正是这样做的;我编写了一个 Ruby 脚本来添加所有永久链接。
这奏效了!谢谢你。
3 个赞
我发现这个解决方案可能行不通,因为重定向链会影响网站的 SEO 分数。它需要两次 301 重定向和三次请求才能到达实际的帖子。
然后,让 Permalink 处理请求。听起来应该可行,但我不确定。
1 个赞