You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让tx_seo生成的站点地图借助RouteEnhancers生成友好URL?

问题

我用tx_seo为扩展「myext」生成的站点地图可正常运行,但生成的链接是带查询参数的格式:

http://domain.local/detail?tx_myext_pi1[action]=list&tx_myext_pi1[controller]=Read&tx_myext_pi1[uid]=333&cHash=4d4...  

期望生成的是友好URL:

http://domain.local/detail/title-of-record-333

我已经在sites/mysite/config.yaml里定义了路由配置,能不能直接用其中的RouteEnhancers让站点地图生成友好URL?我不想新建SitemapDataProvider类,那样会重复代码还可能和配置有差异,想直接复用现有配置。

我的config.yaml配置如下:

routeEnhancers:
  PageTypeSuffix:
    type: PageType
    map:
      sitemap.xml: 1533906435
  MyPlugin:
    type: Extbase
    extension: MyExt
    plugin: Pi1
    defaultController: 'Mycontroller::list'
    limitToPages: [12345]
    routes:
      - routePath: '/mypath/{question}/{tab}/{theme}'
        _controller: 'Mycontroller::show'
    aspects:
      question:
        type: PersistedAliasMapper
        tableName: tx_myext_domain_model_question
        routeFieldName: path_segment
      theme:
        type: PersistedAliasMapper
        tableName: tx_myext_domain_model_theme
        routeFieldName: name
      tab:
        type: StaticRangeMapper
        start: '1'
        end: '3'
解决方案

可以直接复用现有RouteEnhancers配置让tx_seo生成友好URL的站点地图,核心是让路由配置覆盖站点地图用到的控制器/动作,同时确保tx_seo调用TYPO3路由解析器生成链接,具体调整步骤如下:

  1. 补充站点地图对应动作的路由规则
    你的现有路由仅配置了Mycontroller::show动作,但站点地图用到的是Read::list,需要在routes节点新增对应动作的路由规则,匹配你期望的友好URL格式:

    routes:
      - routePath: '/mypath/{question}/{tab}/{theme}'
        _controller: 'Mycontroller::show'
      # 新增站点地图目标动作的路由规则
      - routePath: '/detail/{question}'
        _controller: 'Read::list'
    

    这里的routePath对应你想要的/detail/title-of-record-333格式,{question}关联到已配置的别名映射。

  2. 确认Aspect映射匹配
    你已配置question的PersistedAliasMapper,只要tx_myext_domain_model_question表的path_segment字段存储了title-of-record-333这类别名,就能自动完成uid到别名的映射。如果站点地图生成依赖其他字段,可新增对应Aspect配置。

  3. 验证路由覆盖范围

    • 确保limitToPages包含站点地图关联的页面ID(如果插件部署在页面12345,且站点地图基于该页面生成,当前配置已满足)
    • 修改路由配置后必须清除TYPO3缓存,否则新配置不会生效
  4. 检查SitemapDataProvider配置
    若使用tx_seo默认的ExtbaseXmlSitemapDataProvider,需确保其配置正确关联到你的扩展、插件和动作,这样才能匹配到RouteEnhancers:

    # 在config.yaml的tx_seo节点下补充配置
    tx_seo:
      config:
        xmlSitemap:
          sitemaps:
            myext:
              provider: TYPO3\CMS\Seo\XmlSitemap\ExtbaseXmlSitemapDataProvider
              config:
                extension: Myext
                plugin: Pi1
                controller: Read
                action: list
                # 按需添加存储库、排序等其他配置
    

完成以上调整后,站点地图生成时会自动复用现有RouteEnhancers配置,生成符合预期的友好URL,无需编写自定义SitemapDataProvider。

内容的提问来源于stack exchange,提问作者yogi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:03:17