TYPO3 pageNotFound_handling – MultiDomain MultiLanguage MultiWebsite

1 Voraussetzungen:

TYPO3 6.2.x, realURL mit korrekt konfigurierten Domains

2 Problemstellung:

Bereitstellen einer separaten 404-Seite für jede Webseite in dem TYPO3-Account.

3 Lösung:

Seiten anlegen

Anlegen einer Seite für die 404-Fehlermeldung im Pagetree jeder Webseite.
Diese Seiten können dann in alle verfügbaren Sprachen übersetzt werden.

a) LocalConfiguration.php

$GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFound_handling'] = 'USER_FUNCTION:typo3conf/pageNotFoundHandling.php:user_pageNotFound->pageNotFound';

Natürlich kann die Änderung auch im Install-Tool unter [FE][pageNotFound_handling] vorgenommen werden.

b) realurl_conf.php

$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.domain1.de']['errorPage'] = 1;
$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.domain2.de']['errorPage'] = 2;

c) typo3conf/pageNotFoundHandling.php

class user_pageNotFound {
    function pageNotFound($params,$tsfeObj) {
        global $TYPO3_CONF_VARS;
        $url = \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_SITE_URL').'index.php?id='.$TYPO3_CONF_VARS['EXTCONF']['realurl'][\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('HTTP_HOST')]['errorPage'];
        $_buffer = \TYPO3\CMS\Core\Utility\GeneralUtility::getUrl($url);
        echo $_buffer;
    }
}

d) Typoscript (Google Analytics Tracking)

temp.ga_404 = TEXT
temp.ga_404.value = ga(function() {ga('send','event','Error','404','Seite: ' + document.location.pathname + document.location.search + ' Verweis: ' + document.referrer);});

12 Kommentare

  • Hi Steffen,

    sehr schöne Lösung, funktioniert einwandfrei und wieder mal eine zusätzliche Extension eingespart.
    Danke!

  • Pingback: realurl_conf.php für multidomain multilanguage multiwebsite multienvironment Accounts | Web Dev Log

  • Schön dass es auch auf einem anderen System scheinbar ohne Probleme funktioniert.

    Es ist übrigens gar nicht so einfach eine Extension zu finden, die verschiedene 404-Seiten in einem TYPO3 Account ermöglicht. Ich habe jedenfalls keine gefunden, die auch funktioniert.

  • Hallo Steffen,

    danke für die wirklich brauchbare Lösung, funktioniert auch bei mir sehr gut. Ich hab dazu aber noch zwei Anregungen:

    1. Den Eintrag für die LocalConfiguration.php hab ich über das Install-Tool unter „[FE][pageNotFound_handling]“ gemacht.

    2. In der typo3conf/pageNotFoundHandling.php hab ich „t3lib_div::getIndpEnv“ durch „TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv“ ersetzt.
    Siehe: http://wiki.typo3.org/TYPO3_CMS_6.2#Compatibility

  • Hi Steffen,

    für die Single Domain Variante (domain.com/en) habe ich das Script (Zeile 5 ersetzen) wie folgt abgewandelt:
    // singledomain (domain.de/en/)

    foreach ($TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']['preVars'] as $pre){
    	if ($pre['GETvar'] === $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']['pagePath']['languageGetVar']){
    		if (is_array($pre['valueMap'])){
    			$append = array();
    			foreach ($pre['valueMap'] as $key => $value){
    				if (substr($params['currentUrl'], 0, strlen($key) + 2) === '/'.$key.'/'){
    					$append[] = $key.'/';
    				}
    			}
    		}
    	}
    }
    $url = \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_SITE_URL').implode($append);
    • Hi Stephan,

      vielen Dank, das ist eine gute Ergänzung. 🙂

      Leider habe ich im Moment keine Zeit es auszuprobieren.

      Müsste die URL nicht so erzeugt werden:

      $url = \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_SITE_URL').implode($append).'index.php?id='.$TYPO3_CONF_VARS['EXTCONF']['realurl'][\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('HTTP_HOST')]['errorPage'];

      Oder woher bekommst Du die ID der ErrorPage?
      Dein Snippet zeigt dann die Startseite oder hab ich was übersehen?

  • Die Funktion loadPage braucht man nicht implementieren, dafür gibt es \TYPO3\CMS\Core\Utility\GeneralUtility::getUrl().

  • Habe das Ganze gerade so realisiert, etwas unkomplizierter:

    Im Seitenbaum jeder Domäne eine 404-Seite mit beliebigen Namen anlegen. Jede dieser Seiten bekommt in den Seiteneigenschaften als „Speaking URL path segment“ den gleichen Namen zum Beispiel 404.

     

    Im Install Tool unter All configuration/FE/PageNotFoundHandling eintragen REDIRECT:/404 und das war es.

    Thomas

    • @Thomas: Wenn ich mich nicht irre, dann funktioniert das aber nur solange Du keine 404 in verschiedenen Sprachen benötigst…

  • super, vielen Dank. Das klappt gut und ist was ich gebraucht habe.
    Die REDIRECT:/404 Variante brachte mir andere Schwierigkeiten.
    Vielleicht lag es aber auch an einer unsauberen realurl_conf.

Schreibe einen Kommentar zu Andreas Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Highlighting von Codes ist mit den Tags  [ts], [php], [html], [javascript], [xml] oder [code] möglich.