TYPO3 v8.7(ELTS) realurl问题:L=../跳转L=0页面,如何配置转自定义404?
解决TYPO3 v8.7(ELTS)+ realurl中L=../参数的404重定向问题
这个问题核心是realurl默认未对L参数做严格校验,导致非法值(比如../)被解析为默认语言(L=0)而非触发错误。要解决这个问题,需从realurl的前置参数(preVars)配置入手,添加自定义校验逻辑拦截非法值,再配合TYPO3的自定义404配置实现重定向。
步骤1:修改realurl配置文件
找到你的realurl配置文件(通常是typo3conf/realurl_conf.php或站点根目录的同名文件),定位到preVars数组中处理L参数的部分,在原有配置基础上添加自定义校验的用户函数:
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'] = [ 'your_domain.com' => [ 'init' => [ // 保留原有init配置 ], 'preVars' => [ [ 'GETvar' => 'L', 'valueMap' => [ 'en' => '0', 'de' => '1', ], // 新增自定义校验逻辑 'userFunc' => 'TYPO3\\CMS\\Core\\Utility\\GeneralUtility::callUserFunction', 'userFunc_options' => [ 'userFunc' => 'YourVendor\\YourExtension\\Realurl\\LangParamValidator->validate', ], 'noMatch' => 'bypass', ], // 其他preVars配置 ], // 其他realurl配置 ], ];
步骤2:实现语言参数校验函数
在自定义扩展中创建校验类(若无自定义扩展,也可直接在realurl配置文件中写匿名函数,但推荐用扩展维护):
namespace YourVendor\YourExtension\Realurl; class LangParamValidator { public function validate($params, $reference) { $langId = $params['value']; // 仅允许合法语言ID(根据你的实际语言配置调整,示例为0和1) if (!in_array($langId, ['0', '1'], true)) { // 触发TYPO3的404错误流程 $GLOBALS['TSFE']->pageNotFoundAndExit('Invalid language parameter'); } // 合法参数返回原值,继续正常解析流程 return $langId; } }
步骤3:配置自定义404页面
在站点根模板的TypoScript中设置自定义404页面,确保触发错误后跳转到指定页面:
config { # 可使用页面UID或URL路径 pageNotFound_handling = 123 # 或者 pageNotFound_handling = /custom-404.html }
原理说明
realurl的preVars处理链会在解析URL参数时调用自定义用户函数,通过校验L参数值拦截非法输入,直接触发TYPO3的404错误机制,最终跳转到你配置的自定义404页面,同时非法参数不会保留在浏览器地址栏中。
内容的提问来源于stack exchange,提问作者schumiel
相关产品推荐
相关产品推荐

