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.
Gute Lösung, funktioniert bestens. Doch leider scheint es mit der PHP Session ID ein Problem zu geben.
Typo3 generiert unter Protokoll im Backend folgende Fehlermeldung:
Core: Error handler (FE): PHP Warning: session_start() [function.session-start]: The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /home/xxx/xxx/fileadmin/user_func/pageNotFoundHandling.php line 36
Zeile 36 ist im oberen Beispiel Zeile 22. Kann man die Meldung ignorieren?
Danke