TYPO3 9.5.20升级后Typolink始终跳转默认语言求助
结合你描述的现象(升级后所有Typolink不管当前语言都跳德语,仅博客扩展和404页面正常)和提供的配置,我整理了几个核心排查和解决方向:
1. 修复TypoScript里的defaultGetVars配置(最可能的根因)
看你的setup.typoscript,全局配置里设置了defaultGetVars { L = 0 },但在各个语言的条件块里没有覆盖这个值!这会导致即使当前sys_language_uid切换到1/2/3,Typolink生成时还是会默认带上L=0参数,直接跳转到默认语言。
你需要在每个语言的条件块里添加对应的defaultGetVars设置:
[globalVar = GP:L = 1] config { sys_language_uid = 1 language = en locale_all = en_GB.UTF-8 htmlTag_setParams = lang="en" dir="ltr" class="no-js" defaultGetVars { L = 1 # 新增这行,匹配当前语言ID } } [global] [globalVar = GP:L = 2] config { sys_language_uid = 2 language = fr locale_all = fr_FR.UTF-8 htmlTag_setParams = lang="fr-CH" dir="ltr" class="no-js" defaultGetVars { L = 2 # 新增这行,匹配当前语言ID } } [global] [globalVar = GP:L = 3] config { sys_language_uid = 3 language = it locale_all = it_IT.UTF-8 htmlTag_setParams = lang="it-ch" dir="ltr" class="no-js" defaultGetVars { L = 3 # 新增这行,匹配当前语言ID } } [global]
2. 协调站点配置与TypoScript的语言 fallback 设置
你的config.yaml里,英语(languageId=1)的fallbacks设置为'1,0,2,3',这里包含了自身,会导致不必要的循环fallback,建议调整为:
fallbacks: '0' # 仅fallback到默认德语,避免循环
同时,TypoScript里的sys_language_mode = content_fallback和站点配置的fallbackType: strict可能存在冲突,尝试把TypoScript里的sys_language_mode改成strict,和站点配置保持一致:
config { // Language Settings sys_language_overlay = 0 sys_language_mode = strict # 修改这里 language = de ... }
3. 彻底清理所有缓存
TYPO3升级后缓存残留是常见问题,尤其是配置缓存和页面缓存。一定要通过后端的Flush TYPO3 Cache(选择全部缓存,不止页面缓存),或者直接删除var/cache目录下的所有文件,确保新的配置完全生效。
4. 验证当前语言上下文是否正确触发
在前端模板的某个测试位置添加调试输出,确认当前的sys_language_uid是否和当前语言环境匹配:
当前语言ID: {TSFE:sys_language_uid}
如果输出的ID和当前语言不对应(比如切到法语但显示0),那说明你的[globalVar = GP:L = X]条件没有正确触发,可能是URL里的L参数传递有问题,或者服务器有URL重写规则干扰了参数。
5. 检查自定义链接生成逻辑
你提到只有博客扩展的链接正常,说明核心的Typolink解析可能正常,问题出在其他内容的链接生成上:
- 检查是否有自定义扩展或模板里用了硬编码的
L=0参数; - 检查是否用了旧的
typolinkTypoScript函数而不是Fluid的<f:link.page>标签,旧函数在9.x里可能需要调整参数; - 确认数据库里的
t3://page链接是否被正确解析,尝试手动在Fluid里用<f:link.page pageUid="686">测试链接</f:link.page>,看是否生成对应语言的URL。
内容的提问来源于stack exchange,提问作者lagiacrux

