保持旧网站在原地,并让旧链接在discourse中正常工作?

正如建议的那样,我正试图在不移动旧论坛的情况下,在同一域上使用Discourse。我设法让nginx进行代理并解决了与Discourse URL的任何冲突,因此在初始页面加载时(以及出于SEO目的)一切都运行良好。

我的问题在于链接到Discourse中的那些旧链接。Discourse应用程序路由会将这些URL拦截为内部链接,因此导致404。我尝试了多种方法来解决这个问题,但使用现有工具无法处理URL或同域链接。(我也不想将Discourse放在子文件夹中)

如果我能向SERVER_SIDE_ONLY数组添加内容,模仿我在nginx中所做的事情,那应该可以解决问题。有人有什么建议吗?

这根本不是那个主题推荐的内容。你应该在新子域上启动新论坛,然后放弃旧论坛。

我认为这是正确的。如果你真的想让旧论坛和新论坛都在同一个域上(再说一次,考虑到你已经概述的问题,这似乎是个糟糕的主意),你可以有一个指向旧论坛的 CNAME 的另一个域,然后让 Discourse 链接到那些域,这样它就会认为这是一个不同的服务器,并且不会尝试自己处理这些链接,当 Nginx 收到链接时,它要么只提供来自另一个域的数据,要么将浏览器重定向到正确的域。

我曾考虑将旧内容放在 archive 子域名上(有影响 SEO 的风险),但即便如此,我认为除了为每个可能的页面创建永久链接之外,没有办法让 Discourse 更改用户提供的链接。我猜想 archive 子域名的使用最终会随着人们的了解和从浏览器地址栏复制粘贴而普及开来。

如果你刚刚进行了导入,那么所有这些都会有永久链接,但这没什么帮助。而且,靠进口为生的人可能会这么想。

最简单的方法是将新论坛迁移到一个新 URL(希望你还没有破坏太多 SEO),或者将旧论坛迁移到另一个 URL(并丢失旧内容的 SEO,尽管有可能进行永久链接规范化或使用 NGINX 魔术进行重定向)。新网站已经运行很长时间了吗?

你可能可以创建一个永久链接规范化。 。 。不。我认为 permalink_normalizations 仅适用于永久链接,并且它们不能是外部的。也许可以通过主题组件查找匹配的 URL 并用假的/cname 主机名重写它们,但我不知道什么会被烘焙到帖子中(是带有主机名的完整 URL,还是烘焙过程会剥离主机名?)。

如果完整 URL 在烘焙的帖子中,那么你可以做一些像我在 GitHub - literatecomputing/runners-onebox-theme: Custom oneboxes for Garmin and Strava 中所做的那样的事情。

1 个赞

:bulb:!我可以通过主题 HTML 中的脚本来处理 404 页面……

我让 404 页面将浏览器窗口重新加载到“丢失”的 URL,这将命中服务器端。它奏效了!我看到的唯一缺点是重定向很明显,而且对于任何真正的 404,您都会被带出应用程序(丢失侧边栏/标题)。

<script type="text/discourse-plugin" version="0.8">
  api.onPageChange((url, title) => {
    const router = api.container.lookup('service:router');
    var is404 = document.getElementsByClassName("page-not-found");
    if (is404.length) {
        const params = new URLSearchParams(router.currentRoute.queryParams).toString();
        let q = "";
        if (params){ q = "?"+params; }
        window.location.replace(window.location.origin + url + q);
    }
  });
</script>

我认为你应该能够在客户端捕获它们,就像我之前建议的那样。HTML 中指向旧站点的链接是否包含主机名?

是的,完整的网址就在那里。我会研究创建一个主题组件,谢谢!

1 个赞

主题组件已创建!它会查找指向 hostnamehrefs,其路径与您提供的正则表达式匹配,然后添加一个 click 事件以设置 window.location 来跳过内部路由。

1 个赞

我想知道,在这种情况下,(inline) oneboxing 是否可用。

同一域名的网址会被 onebox,并且仍然存在与普通链接相同的问题。我的主题组件将应用于帖子中的任何 <a> href 链接,因此它也适用于 onebox 链接。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.