TYPO3+RealURL:移除默认语言URL中的?L=0参数
解决TYPO3多语言网站默认语言GET参数移除问题
嘿,这个需求我太熟了!要去掉默认语言(德语,L=0)对应的?L=0参数,得从TYPO3系统配置和RealURL规则配置两方面配合调整,我给你一步步说明:
一、调整TYPO3的TypoScript配置
先修改你现有的语言相关TS,主要是调整参数规则、添加默认变量设置,顺便修正一个locale的拼写小错误:
# language menu config.linkVars = L config.uniqueLinkVars = 1 config.defaultGetVars { L = 0 } language = de locale_all = de_DE.UTF-8 sys_language_uid = 0 htmlTag_langKey = de # English [globalVar = GP:L=1] config{ language = en locale_all = en_GB.UTF-8 # 修正原拼写错误:gb_EN → en_GB sys_language_uid = 1 htmlTag_langKey = en } [global]
关键调整说明:
- 把
config.linkVars = L(1)改成config.linkVars = L:移除强制GET参数的限制,让语言参数可以嵌入URL路径(配合RealURL实现友好路径) config.uniqueLinkVars = 1:确保每个URL只包含一个L参数,避免重复出现config.defaultGetVars { L = 0 }:设置默认语言的L值为0,访问默认语言时无需显式携带参数
二、配置RealURL规则(核心)
接下来修改RealURL的配置文件(通常是typo3conf/realurl_conf.php,TYPO3 9+版本可能在站点配置目录下,逻辑一致),让默认语言不显示语言标识:
<?php $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'] = array( '_DEFAULT' => array( 'init' => array( 'enableCHashCache' => true, 'appendMissingSlash' => 'ifNotFile', 'enableUrlDecodeCache' => true, 'enableUrlEncodeCache' => true, 'defaultLanguageUid' => 0, // 指定默认语言UID为0(德语) ), 'preVars' => array( array( 'GETvar' => 'L', 'valueMap' => array( 'en' => '1', // 英语对应URL路径中的/en/,映射到L=1 ), 'noMatch' => 'bypass', // 默认语言(L=0)直接跳过语言参数,不显示在URL中 ), ), // 以下保留你原有的pagePath、fixedPostVars等配置,无需改动 'pagePath' => array( // ... 你的原有配置 ), ), ); ?>
RealURL配置说明:
defaultLanguageUid = 0:告诉RealURL哪个是默认语言,处理URL时会自动忽略该语言的参数preVars里的valueMap:把英语的L=1映射为友好的路径标识en,访问英语页面时URL会变成yourdomain.com/en/page/noMatch = 'bypass':当匹配到默认语言(L=0)时,不添加任何语言参数到URL,直接显示基础路径
最后一步:清空缓存
配置完成后,一定要清空TYPO3的全部缓存(包括RealURL的URL缓存),这样新的规则才会生效。
内容的提问来源于stack exchange,提问作者ǝlpoodooɟƃuooʞ
相关产品推荐
相关产品推荐

