重定向包含Discourse资源名称的旧论坛URL路径

您好,

我旧论坛的网址格式为 /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 个赞

确实很不幸。

它们看起来是什么样的?您添加的永久链接是什么?

论坛已经上线了吗,还是您仍然可以运行导入脚本?(实际上,您可以编写一个 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 个赞

:laughing:

是的,我正是这样做的;我编写了一个 Ruby 脚本来添加所有永久链接。

这奏效了!谢谢你。

3 个赞

我发现这个解决方案可能行不通,因为重定向链会影响网站的 SEO 分数。它需要两次 301 重定向和三次请求才能到达实际的帖子。

然后,让 Permalink 处理请求。听起来应该可行,但我不确定。

1 个赞