太棒了!即使我的旧版 SMF 没有使用美观的 URL 呢?
你说的“不算完全”是什么意思?
太棒了!即使我的旧版 SMF 没有使用美观的 URL 呢?
你说的“不算完全”是什么意思?
针对您的问题:
index.php?topic=123)将作为永久链接创建并正常工作,但指向特定帖子的锚点链接(例如 index.php?topic=123.msg789#msg789)将不再保留或失效。它们会被截断为仅包含主题 ID。以下是我从 SMF2 导入的论坛中的永久链接示例:

至少该主题仍可作为特定帖子的参考,这已经足够好了。太好了,非常感谢你的回复,也谢谢你整理这些说明。
抱歉,忘了问——如果我的 SMF 设置为 分类->版块->子版块,我是否必须先移除“版块”这一层,使其只有两层深(论坛->子论坛),才能正确转换为 Discourse?
你好 @marcozambi,
我很好奇你是如何实现这一点的。我在 10 月 19 日使用了导入器,将大量论坛从 SMF 迁移到 Discourse,但所有旧格式的链接基本上都丢失了(意味着使用旧 URL 时会返回 404 错误)。
例如,旧链接:
对应的是以下主题:
你愿意分享一下你的“魔法”吗?![]()
没有什么特别的魔法。
当我在2018年9月从SMF导入数据时,SMF2导入脚本完成了所有的工作。
在导入每篇帖子后,脚本会生成相应的永久链接。
无论如何,我对脚本进行了一些 minor 自定义,详情已在该主题的首帖中说明。
没错。您需要将现有的 SMF 子论坛树“扁平化”为两层。
是的,非常感谢你的精彩帖子。我仔细遵循了其中的步骤,并成功迁移了一个拥有 600 万篇帖子的论坛。
不过,也许永久链接确实已生成,你是如何检查它们的?如果它们存在于数据库中,那可能只是需要修复的 Nginx 问题。
您可以通过访问 管理 → 自定义 → 固定链接 来查看您的固定链接列表。
如有需要,您还可以在此处创建新的固定链接。
![]()
正如我所料,它是空的。这意味着脚本的某部分在我们的情况下没有生效。
没关系,我仍然可以手动构建其中一些(刚刚尝试并成功完成了上面示例中的构建)。
这一步是指使用旧的 SMF2 数据库详细信息,还是必须严格按照 ‘user’、‘pass’、‘db’ 来填写?
这一步是指使用旧的 SMF2 数据库详细信息,还是必须严格按照指定的 ‘db’、‘user’ 和 ‘pass’ 来填写?
这一步是否是我唯一需要使用原始旧 SMF2 数据库详细信息的步骤?
这些是用于连接到已容器化的 MySQL 实例的凭据,您的 SMF 论坛数据库转储文件已导入该实例。
需要明确的是,该容器化的 MySQL 运行在与 Discourse 相同的服务器上,其唯一用途是存放您从 SMF 数据库导出的转储文件。
这是您需要在托管原始 SMF2 数据库的服务器上执行的命令,以便生成转储文件,之后您需要将该文件导入上述容器化的 MySQL 实例中。
感谢您的回复。
是的,我已经将原始的 smf2 数据库导入到 Docker 化的 MySQL 实例中的 Discourse 服务器了。
在使用 Settings.php 中的 Docker 化 MySQL 信息后,运行导入脚本时出现以下错误:
正在加载现有群组…
正在加载现有用户…
正在加载现有分类…
正在加载现有帖子…
正在加载现有主题…
正在创建群组
回溯(最近一次调用优先):
11: 来自 script/import_scripts/smf2.rb:701:in `’
10: 来自 script/import_scripts/smf2.rb:28:in `run’
9: 来自 /var/www/discourse/script/import_scripts/base.rb:47:in `perform’
8: 来自 script/import_scripts/smf2.rb:66:in `execute’
7: 来自 script/import_scripts/smf2.rb:77:in `import_groups’
6: 来自 script/import_scripts/smf2.rb:281:in `query’
5: 来自 script/import_scripts/smf2.rb:287:in `__query’
4: 来自 /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.4/lib/patches/db/mysql2.rb:22:in `query’
3: 来自 /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query’
2: 来自 /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt’
1: 来自 /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query’
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query’: 表 ‘db.smf_membergroups’ 不存在 ( Mysql2::Error )
有什么建议吗?
我已经严格按照指南逐行操作了好几次,但始终卡在这个步骤。
谢谢。
请检查您的 MySQL 数据库,确认是否存在 smf_membergroups 表。如果不存在,您可以:
文件扩展名其实并不重要。只要文件包含有效的 SQL 语句,无论扩展名是什么都会被加载。
此外,数据库的前缀通常不是 smf_。许多导入工具都提供了相关选项,但我尚未检查此工具是否支持。
@Paracelsus 我似乎遇到了同样的问题:固定链接为空。![]()
我的 SMF2 运行在根域名上,而 Discourse 运行在 SMF2 根域名的子域名上。这会有影响吗?
是的……固定链接确实很麻烦,但我已经学会与之共存了。我搜索了所有能找到的网页,这些网页上曾发布过指向我们论坛的链接(使用旧的 SMF 格式),然后访问这些页面,提取一些文本字符串或抄录段落,在 Discourse 论坛中搜索这些内容,并替换为固定链接。如果你仍然保留着 SMF 论坛,我建议你尽快这样做,因为有时人们在网页上留下的链接并没有附带任何引用或文本内容,只有 URL,但你仍然可以找到对应的主题。
对我们来说,我们最初使用的是 discourse.forumscp.com,而 forumscp.com 在 SMF 中作为“生产论坛”运行了一段时间(以便在 Discourse 中进行测试并熟悉它)。我多次测试了增量更新的过程,并在迁移前几周再次确认,以确保过渡能够顺利进行。在迁移当天,我们关闭了旧论坛,完成了从 SMF 到 Discourse 的最后一次增量数据库更新,然后按照相关说明更改了域名。我们还需要主机提供商的帮助来检查 Nginx 配置,具体细节我记不太清了,但似乎还涉及一些 DNS 设置需要调整。不过我们只是按照主机提供商的指示操作,一切都很顺利。
您可以寻找其他支持固定链接的导入器并复制其代码。vBulletin 和 phpBB 可能是不错的例子。