Another Blog about the Wide Web World
Header image

TYPO3 404 Handling, feuser (geschuetzter Bereich) und die Mehrsprachigkeit

geschrieben von SiteGefuehl in TYPO3 | Webentwicklung

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.

Facebook Like

You can follow any responses to this entry through the RSS 2.0 You can leave a response, or trackback.

Eine Antwort

  • Pat says:

    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



Hinterlasse eine Nachricht

Deine E-Mail-Adresse wird nicht veröffentlicht.

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>