kentico-kontent - 管理内容项别名的最佳方法
问题描述
我们正在考虑从 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?
谢谢,
解决方案
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 已被修改,您可以存储旧值并使用自定义中间件重定向到新版本。更多的工作,但不需要编辑工作。
推荐阅读
- regex - 用于查找某些单词的正则表达式
- css - 如何在反应组件中调试 webpacker CSS 加载问题?
- openedge - 我如何理解 FOR EACH 和 FOR FIRST 之间的区别?
- php - 我使用唯一验证时出现重复输入错误
- java - Selenium Webdriver“Actions”的执行速度有多快?
- r - 读取“下一行分隔”的文本文件
- python - Pandas Dataframe 无法定位具有不同数据类型的列
- c - 尝试从用户输入的数组中获取最小数字时出现分段错误
- sql-server - 获取 Datagridview 组合框中所选项目的 ID 并显示取决于 Selectedvalue 的表单
- python - 如何反向批量标准化