请参阅 SiteSettings.permalink_redirects
编辑:哎呀。固定链接规范化
请参阅 SiteSettings.permalink_redirects
编辑:哎呀。固定链接规范化
您是指在 /admin/site_settings/category/all_results 中搜索 permalink_redirects?我的设置中没有这个选项。
但是 permalink_normalizations 有点作用,使用 /^forum\\/(view.*)/\\1:
view 开头,例如 viewtopic.php 和 viewforum.php。实际上,在我们的案例中,这似乎是唯一迁移的两个 URL,因此正则表达式可以加强,或者分成两个以进行完全路径匹配。sed 语法)会获取所有以 /forum/view 开头的 URL,并删除 forum/ 部分。现在我们只需要在 Web 服务器(或我们的情况是 Cloudflare)上将所有 /phpbb/(我们旧论坛的路径)重定向到 /forum/,剩下的由 Discourse 处理。早知道这样的话,三年前就应该找到这个方法,而不是破坏所有反向链接
。
但请告诉我 permalink_redirects 应该在哪里,也许它需要一个插件,或者它是 phpBB 导入插件的一部分等等?
编辑:效果很好:
root@micha:~# curl -IL https://dietpi.com/phpbb/viewtopic.php?p=46083
HTTP/2 301
location: /forum/viewtopic.php?p=46083
HTTP/2 301
location: https://dietpi.com/forum/t/is-there-a-simple-launch-page-for-dietpi/11237/1
x-discourse-route: permalinks/show
HTTP/2 200
x-discourse-route: topics/show
第一个重定向 /phpbb => /forum 在 Cloudflare 通过重定向规则完成,以避免给我们的源服务器带来微不足道的负载。第二个重定向到实际主题由 Discourse 通过永久链接完成,通过永久链接规范化删除开头的 forum/,以匹配 phpBB 导入插件添加的永久链接,这些永久链接既不包含旧的也不包含新的论坛子目录路径。
抱歉。我就是这个意思。
不。只需为该路径创建一个规范化即可。
这行不通,因为 Discourse 位于 /forum 目录下,并且无法处理发往 /phpbb 的请求。由于 Discourse 位于子路径下,与要导入的先前论坛软件的路径不匹配,因此别无选择,只能进行重定向(或在代理之前进行重写)到 Discourse 路径,以便其规范化生效。
对了。我错过了。您需要将 /phpbb 重定向到 /forum,并且可能仍然需要处理规范化。
好的,但这确实不难:/^forum\\/(view.*)/\\1 对我们旧的 phpBB 永久链接来说效果非常好。不确定是否取决于设置,导入插件生成的永久链接除了 viewforum.php 和 viewtopic.php 之外还有其他链接,比如用户个人资料链接之类的?
实际上,能够滚动/浏览或排序永久链接会很好,以便更好地了解其中包含哪些 URL 方案。但题外话,在循环搜索模式后,我确信在我们的案例中,只有上面两个存在。
脚本似乎只包含类别、主题和帖子的固定链接。
如果你想创建用户固定链接,并且旧系统中的用户配置文件包含用户 import_id,那么你可以在控制台中用一些 Ruby 代码来创建它们。
很高兴知道。主题和帖子网址使用相同的 PHP 脚本。因此,为了排除任何意外的规范化,我的正则表达式可以分为两个:
/^forum\\/(viewforum.php\\?.*)/\\1 用于分类/^forum\\/(viewtopic.php\\?.*)/\\1 用于主题和帖子… 或者 /^forum\\/(view(forum|topic).php\\?.*)/\\1,不确定在性能方面是否有任何细微差别。
个人资料网址无论如何都不太可能获得反向链接。我们使用它来在我们的发布说明中向报告错误或其建议被纳入我们项目的用户致谢。但这种情况很少见,我猜,而且在我们切换到 Discourse 时,我们发布说明中的链接已立即更新。