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

ApostropheCMS v3中间件配置:匹配子路径返回同Locale页面

解决ApostropheCMS v3中自定义Locale路径的页面匹配问题

你可以通过修改请求的URL和Locale标识,让系统将/en-**/contact这类路径识别为英文Locale的页面请求,具体实现如下:

module.exports = {
  // 保留项目原有的其他配置项
  handlers(self, options) {
    return {
      "@apostrophecms/page:serve": {
        handleCustomLocales(req) {
          try {
            // 匹配所有以 /en- 开头的路径,提取后续的页面路径部分
            const customLocalePattern = /^\/en-[^\/]+(\/.*)$/;
            const pathMatch = req.url.match(customLocalePattern);

            if (pathMatch) {
              // 重构请求URL,替换为标准的英文Locale路径格式
              req.url = `/en${pathMatch[1]}`;
              // 强制设置请求的Locale为英文,确保系统加载对应语言的页面数据
              req.locale = 'en';
              // 如果项目使用了localeId属性,同步更新
              if (req.localeId) {
                req.localeId = 'en';
              }
            }
          } catch (err) {
            // 记录异常日志,避免影响正常请求流程
            self.logger.error('自定义Locale处理中间件异常:', err);
          }
        }
      }
    };
  }
};

实现说明:

  • 正则匹配逻辑:/^\/en-[^\/]+(\/.*)$/会精准匹配/en-xx/xxx格式的路径,捕获组(\/.*)会提取出/contact这类页面路径部分。
  • URL重构:将请求URL修改为/en/xxx的标准格式,让Apostrophe的页面路由系统能正确匹配到对应的英文页面。
  • Locale强制设置:直接修改req.locale(及req.localeId)为en,确保系统使用英文的语言配置和对应Locale的页面内容,避免因为识别到不存在的en-cz Locale而返回404。
  • 异常处理:通过try/catch捕获可能的正则匹配或属性修改异常,并记录日志,保证服务的稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:53:11