Bolt CMS路由配置问题:如何让博客与页面共用/{slug}路径
解决Bolt CMS中页面与博客共享/{slug}路由的问题
我明白你遇到的困扰了——当给页面和博客配置了完全相同的/{slug}路径时,只有第一个路由能生效,第二个根本没机会触发。这是因为Bolt基于的Symfony路由系统,会按路由定义的顺序匹配第一个符合路径规则的路由,不会继续检查后续配置。
下面是能解决问题的正确配置方案,通过路由优先级+动态条件判断实现两者共享路径:
# 博客路由:设置更高优先级,先检查slug是否属于博客内容 blogitemsbinding: path: /{slug} defaults: _controller: controller.frontend:record contenttype: blogitems # 条件判断:仅当该slug存在于blogitems内容类型时,才匹配此路由 condition: "repository('blogitems').findOneBySlug(request.get('slug')) is not null" # 提升优先级,确保此路由先被系统检查 priority: 10 # 页面路由:当博客路由不匹配时,自动 fallback 到页面查找 pagebinding: path: /{slug} defaults: _controller: controller.frontend:record contenttype: pages
配置细节说明:
- 优先级(priority):给博客路由设置
priority:10(默认路由优先级为0),让它在页面路由之前被系统检查。 - 条件判断(condition):借助Bolt内置的repository服务,动态验证当前请求的slug是否存在于
blogitems中。只有验证通过时,才会用这个路由处理请求。 - ** fallback 逻辑**:如果博客路由的条件不满足(即slug不在博客内容里),系统会自动匹配后续的页面路由,去
pages中查找对应的内容。
注意事项:
请务必保证pages和blogitems中的slug没有重复,否则优先级更高的博客路由会优先匹配,导致对应的页面无法正常访问。
内容的提问来源于stack exchange,提问作者DelphiLynx
相关产品推荐
相关产品推荐

