上次更新破坏了分类的永久链接

上次更新后,分类的永久链接已损坏,帖子的永久链接工作正常。
例如:category/11562 重定向到 c/11562,这是不正确的,正确设置的重定向目标应该是 c/general/4 或 c/4
有人能帮我解决这个问题吗?

您为 category/11562 创建的永久链接曾重定向到 general,但现在已损坏?

1 个赞

这是哪个更新分支?

对了,它以前运行正常。然后,我更新到了:

<meta name="generator" content="Discourse 3.3.0.beta1-dev - https://github.com/discourse/discourse version 0bb492c6b6b79389a12b277b9d25b99e75f2625d">

完全清空数据库以从头开始重新导入其他论坛数据,现在它不工作了。

我认为这是问题所在,因为我无法在今天早上通过的测试中重现此问题。

你能检查一下永久链接是否仍在你的数据库中,以及它是否仍然指向正确的位置?

3 个赞

我再次添加了永久链接,通过新的导入完成,由导入脚本完成。但我还尝试手动通过网络添加。请看附件,这是网络截图和数据库结果。也许我遗漏了什么:

抱歉,每个帖子只允许一张截图

您的固定链接不在 /category/11562,而是在 /forum/category/11562

我猜测您在过程中丢失了固定链接的规范化设置。

3 个赞

我不明白,如果我检查对 https://preview.vaadin.com/forum/category/11562 的响应,我会收到一个 302 和 Location:https://preview.vaadin.com/forum/c/11562

而对于主题,例如:https://preview.vaadin.com/forum/thread/851770,我会收到一个 301 和 Location:https://preview.vaadin.com/forum/t/tabsheet-tabs-not-displaying-properly-in-ie8-after-upgrade-to-6-7-1/173931

我期望 Discourse 能够平等地处理两者,正如你所见,两者都保留了 /forum/ 这个片段。

1 个赞

所以你没有提到你的整个论坛都是一个子文件夹安装的事实。

4 个赞

我深入研究了一下,不明白这怎么可能奏效,因为 category/ 总是会触发 categories#redirect 路由,而且这最近也没有改变。

get "category/*path" => "categories#redirect"

编辑:下面的帖子显示它以前确实奏效过。

1 个赞

是的。我无法理解在子文件夹安装中,永久链接和永久链接规范化将如何工作。

而且它一直都是子文件夹安装吗?

而且你在重新运行导入脚本时没有其他任何改变吗?

看起来最有可能的是你的脚本中有一些不同之处。

等等。https://meta.discourse.org/category/67 重定向到 https://meta.discourse.org/c/announcements/67,所以……不,但有一个规范显示永久链接会覆盖那个 /category 重定向,而且它已经有 4-5 年了。

所以我想我会手动创建一些类别重定向来弄清楚发生了什么(比如 /category/mycategory 或其他不包含数字的内容)

2 个赞

好发现 @pfaffman,该测试意味着它确实应该有效。

1 个赞

哇,我甚至不知道那有可能!

是的,这很酷,请看 Serve Discourse from a subfolder (path prefix) instead of a subdomain

4 个赞

感谢您的所有回答!

有趣的是,我们发现只有当原始 URL 中没有名为 /category/ 的路径时,子文件夹中的类别固定链接才能正常工作。正如 @pfaffman 在他的回答中所提到的。例如,/forum/category_foo/123 会正确重定向到目标通用类别。
Discourse 会捕获 /category/ 并将其覆盖为 /c/
因此,这可以很容易地解决:
添加一个从 /c/11562 到类别 General /c/4 的固定链接重定向(来自旧的 category/11562)。

您说得对,第一次安装没有子文件夹,但第二次有子文件夹,这是第三次。我们进行了测试,我相信前两次都有效。第二次和第三次之间唯一的变化是,我们在第一次和第二次之间没有清理数据库,而第三次是在 Docker 外部全新安装并使用新数据库(除了升级到 Discourse v3)。因此,我怀疑 Discourse v3 beta 中有些东西发生了变化。否则,为什么它以前能正常工作,即使没有子文件夹?

1 个赞

这是你的答案

如果我理解正确的话,你的意思是 Discourse 仅在路由中存在段时,才将 /category/ 重定向到 /c/

不过,以你的论坛为例:https://meta.discourse.org/,如果我输入 https://meta.discourse.org/category/1,我会被重定向到 https://meta.discourse.org/c/bug/1

这与我们在自己的安装中遇到的情况相同,你的网站也不可能从 /category/#old_number 重定向到 /c/#real_category,你总是会停留在 /c/#old_number