首页 > 解决方案 > 管理内容项别名的最佳方法

问题描述

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

当某些页面(例如 sub-productAA 正在从 productA 移动到 ProductB)时,这种商业案例并不罕见。

例如:从/products/ProductA/sub-productAA 变为/products/ProductB/sub-productsAA。假设 sub-productAA 通过其原始 URL:/products/ProductA/sub-productAA在第 3 方网站上做广告。

现在原始 URL 已死。如何处理这种情况?

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

谢谢,

标签: kentico-kontent

解决方案


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

我认为没有任何单一正确的解决方案。如果您没有要管理的大量别名,您可以在 Kontent 中通过创建具有 slug 和链接项的内容类型来处理它们,以便您可以使用它来存储别名并重定向到正确的内容项。对于您的示例:

  • 产品内容类型项目具有“ProductB/sub-productsAA”的 slug
  • 别名内容类型项目具有“ProductA/sub-productAA”的 slug

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

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

如果没有返回,请再次搜索别名:

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

这样,如果第一次失败,您只会拨打第二次电话。然后,您可以检索链接项目的 slug 并将客户端重定向到正确的 URL。

不利的方法是它需要内容编辑器来管理别名。这不是一件坏事,因为他们应该考虑更改 URL 的后果。

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


推荐阅读