迁移后如何将对 vBulletin 帖子的 URL 请求映射到 Drupal 7 论坛评论?

How to map URL requests for vBulletin posts to Drupal 7 Forum comments after migration?

我需要帮助将对 vBulletin post 的请求映射到他们在 Drupal 7 论坛上的新位置。

我继承了一个 Drupal 站点,它是从带有 vBulletin 的 Drupal 5 迁移到带有原生 Drupal 论坛 + 高级论坛的 Drupal 7 后的。新坐姿也使用 PathAuto。

每天我都会收到很多使用旧 D5/vBulletin URL 方案的 http 请求,并且没有适当的映射来重写目标。

我相信我可以使用 Apache mod_rewrite 或 Drupal Global Redirect 来处理这个问题,如果我可以将旧系统映射到新系统的话。

对于 "thread" 的请求,例如example.com/forums/showthread.php?t=1 似乎可以映射,因为已经使用现有节点的标题为线程的节点创建了 Drupal 7 路径别名。因此,我可以使用传入查询的 't' 参数在 vBulletin 数据库中查找旧节点标题,根据新系统上使用的 PathAuto 设置编辑该字符串,并创建一个 URL 别名。 [想知道有没有更好的办法。]

但对于 "post" 的传入请求,例如example.com/我不知道该怎么做。 vBulletin 数据库在 "post" table 中有 post,但在 Drupal 7 论坛中,初始 post 之后的任何内容都是 "comment",并且没有URL 为它创建别名(因为在大多数情况下它在 vBulletin 中没有标题)。

我想我可以找到 post 所属的线程并将用户重定向到线程的顶部,作为一种解决方法,但我想要一个准确的地图。

请问有什么解决办法吗?

Drupal Migrate 在数据库中创建并保存表,将旧资源 ID 映射到新 ID。

您只需要小心,因为 vBulletin 和 Drupal 论坛之间的架构不同;主要是在该论坛中,D7 中的 post(线程中的第一个 post 除外)不是节点,而是评论。

但我能够使用 Join SQL 查询来查找新资源 ID:

mysql> SELECT m.sourceid1, m.destid1, c.cid, c.nid, c.subject FROM migrate_map_forum_posts m  LEFT JOIN comment c ON c.cid = m.destid1 LIMIT 3;
+-----------+---------+-------+-------+-----------------+
| sourceid1 | destid1 | cid   | nid   | subject         |
+-----------+---------+-------+-------+-----------------+
|         2 |   35837 | 35837 | 10426 | RE: Test        |
|         3 |   35838 | 35838 | 10426 |                 |
|         4 |   35839 | 35839 | 10426 | I see a picture |
+-----------+---------+-------+-------+-----------------+

此解决方案仅依赖于新的 Drupal 7 数据库,如果迁移完美无缺(我猜如果它完美无缺,映射会在当时完成,大声笑)。但是迁移地图表并不总是包含您需要的所有数据。

如果您可以访问旧的 vBulletin 数据库,您可以深入挖掘。在我继承的迁移中,一些 vBulletin 'posts' 没有进入 D7 迁移映射表。但是通过做更多的查询,我能够从 vBulletin 数据库中获得 post 所属的 'threadid',并找到 D7 上论坛主题的节点 ID,这样我至少可以让用户访问正确的讨论。