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-czLocale而返回404。 - 异常处理:通过
try/catch捕获可能的正则匹配或属性修改异常,并记录日志,保证服务的稳定性。
内容的提问来源于stack exchange,提问作者justyna
相关产品推荐
相关产品推荐

