管理内容项别名的最佳方法

Best approach to manage content item aliases

我们正在考虑从 Kentico CMS 迁移到 Kontent。 到目前为止,我们已经找到了大多数导航相关问题的答案。但有一个问题尚不清楚。如何在 MVC.NET+Kontent 应用程序中实现页面别名。

当某些页面(假设子产品 AA 正在从产品 A 移动到产品 B)时,这种情况并不少见。

例如:从 /products/ProductA/sub-productAA 变为 /products/ProductB/sub-productsAA 。 假设子产品 AA 在第 3 方网站上通过其原始 URL: /products/ProductA/sub-productAA 进行了广告宣传。

现在原来的 URL 已经死了。 如何处理这种情况?

另一个示例,产品已重命名,slug 也已重命名,以更好地解决产品问题。并且原始 URL 已在其他地方发布。 如何处理它并正确重定向到新的 URL ?

谢谢,

Kontent 没有为您提供任何处理页面别名的内置方法。作为无头 CMS,您可以决定如何将内容项映射到 URLs。

我认为对此没有任何单一的正确解决方案。如果您没有大量的别名需要管理,您可以在 Kontent 中处理它们,方法是创建一个包含 slug 和链接项的内容类型,这样您就可以使用它来存储别名并重定向到正确的内容项。例如:

  • 产品内容类型项目有 "ProductB/sub-productsAA"
  • 别名内容类型项目有 "ProductA/sub-productAA"

然后你有一个从产品中通过 slug 检索内容的操作:

var response = await _deliveryClient.GetItemsAsync<Product>(new EqualsFilter($"elements.{Product.SlugCodename}", productUrlSlug));

如果返回 none,则对别名进行另一次搜索:

var response = await _deliveryClient.GetItemsAsync<ProductAlias>(new EqualsFilter($"elements.{ProductAlias.SlugCodename}", productUrlSlug));

这样你就可以在第一次失败时才进行第二次调用。然后您可以检索链接项的 slug 并将客户端重定向到正确的 URL.

缺点是它需要内容编辑者来管理别名。这不是坏事,因为他们应该考虑更改 URLs.

的后果

另一种方法是跟踪服务器上的别名。您可以使用 webhooks 来接收有关内容更改的通知。如果产品 slug 已被修改,您可以存储旧值并使用自定义中间件重定向到新版本。更多工作,但无需编辑工作。