Vielleicht haben es einige von euch bemerkt: Hat man einen geschützten Bereich in TYPO3 (4.5.5) mit feuser und srfeuserregister laufen, außerdem eine Mehrsprachigkeit (in meinem Fall deutsch als default und englisch als id=1) und das 404 Handling an, dann kommt es zu Problemen. Anstatt die Login Maske von feuser aufzurufen, nachdem ein Link zum geschützen Bereich aufgerufen wurde, erscheint eine 404 Seite. Dieses Problem habe ich folgendermaßen mit einer kleinen Funktion behoben:
<?php define(LOGIN_URL, "http://www.domain.de/login.html"); define(LOGIN_URL_EN, "http://www.domain.de/en/login.html"); define(NOTFOUND_URL, "http://www.domain.de/404.html"); define(NOTFOUND_URL_EN, "http://www.domain.de/en/404.html"); class user_pageNotFound { function pageNotFound($param, $ref) { if ($param["pageAccessFailureReasons"]["fe_group"] != array(""=>0)) { header("HTTP/1.0 403 Forbidden"); if ($_GET['L'] == 1){ $url = LOGIN_URL_EN."?redirect_url=" . $param["currentUrl"]; } else { $url = LOGIN_URL."?redirect_url=" . $param["currentUrl"]; } } elseif ((substr($param['currentUrl'], 1, 2)) == "en") { $url = NOTFOUND_URL_EN; } else { $url = NOTFOUND_URL; } session_start(); $strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/'; session_write_close(); $c = curl_init(); curl_setopt($c, CURLOPT_URL, $url); curl_setopt($c, CURLOPT_COOKIE, $strCookie); $contents = curl_exec($c); curl_close($c); if ($contents) return $contents; else return FALSE; } } ?>
Hierbei wird vor dem 404 Handling auch noch die RealURL abgefragt und je nach Sprache (in meinem Fall „en“) eine andere 404 Seite ausgegeben. Bitte ersetzt oder erweitert diesen Bereich nach euren Anforderungen. Außerdem müssen von euch natürlich auch die vier Konstanten (LOGIN_URL, NOTFOUND_URL..) geändert werden.
Zuvor muss in dem Install Tool oder in der localconf.php folgender Eintrag geändert werden: [FE][pageNotFound_handling] = USER_FUNCTION:fileadmin/scripts/pageNotFoundHandling.php:user_pageNotFound->pageNotFound
und natürlich der oben genannte Code in das jeweilige Verzeichnis unter fileadmin in die Datei pageNotFoundHandling.php
eingefügt werden.