Zum Inhalt springen

mehrsprachige Fehlerseiten mit cooluri

Erstellt am 18. Februar 2011 · 2 Antworten · letzte Antwort am 8. September 2011

Tags: URLs & Routing, Weiterleitungen & 404, Frage

mike_72 ·

Hallo Forum,

ich habe eine mehrsprachige Webseite (aktuell 4 Sprachen) mit der Extension cooluri (1.0.21). Das funktioniert wunderbar und die URL´s werden je nach Sprache so angelegt:

www.domain.de/startseite.html
www.domain.de/en/home.html
www.domain.de/fr/accueil.html
www.domain.de/es/casa.html

Die Übersetzungen mal bitte aussen vor lassen...

In der CoolUriConf.xml habe ich ein redirect auf eine Fehlerseite gemacht.

<behavior type="redirect">http://www.domain.de/fehler-404.html</behavior>

Und die Fehlerseite habe ich ebenfalls in allen Sprachen angelegt:

www.domain.de/fehler-404.html
www.domain.de/en/error-404.html
www.domain.de/fr/erreur-404.html
www.domain.de/es/error-404.html

Da die Fehlerseite real angelegt ist und im Header 200 zurückgibt, gebe ich hier mittels TypoScript explizit einen 404 Header aus.

page.config.additionalHeaders = HTTP/1.1 404 Not Found

Existiert eine aufgerufene Seite nicht, wird meine Fehlerseite www.domain.de/fehler-404.html mit Header 404 ausgegeben. Bis hier funktioniert das wunderbar.

Zu meinem Problem:
Wenn jemand z.B. auf der englischsprachigen Version unterwegs ist, wird er im Fall eines 404 auf die deutsche Fehlerseite geleitet. Was eigentlich auch logisch ist, denn in der CoolUriConf.xml wird ja explizit auf diese Seite und nicht auf die /en/error-404.html geleitet.
Hat jemand hier einen Lösungsansatz, wie ich zur Fehlerseite der aktuell gewählten Sprache leiten kann? Optimal wäre, wenn man z.B. direkt im XML pro Sprache die Fehlerseite definieren könnte.

<behavior type="redirect" lang="de">http://www.domain.de/fehler-404.html</behavior>
<behavior type="redirect" lang="en">http://www.domain.de/en/error-404.html</behavior>
<behavior type="redirect" lang="fr">http://www.domain.de/fr/erreur-404.html</behavior>

Ich schaue mal, ob man die Funktion pageNotFound in der link.Functions.php diesbezgl. anpassen kann. Besser wäre natürlich, wenn jemand einen Ansatz oder eine Lösung hätte, ohne in die Extension einzugreifen.
Danke schonmal für Eure Anregungen und Tipps.

-------------
TYPO3 4.5.0
PHP 5.2.0

Denex ·

Hallo,

bisher waren bei uns alle zufrieden damit das alle Sprachen auf eine allgemine Fehlerseite geführt haben. Aber nun soll doch für jede Sprache auf eine seperate Fehlerseite weitergeleitet werden.

Bevor ich mich jetzt auch durch den Code wühlen muss wollte ich mal fragen ob es da bereits eine Lösung gibt?

Grüsse
Denex

danielsj ·

Hallo zusammen!

Also, ich habe das folgendermaßen gelöst:

1. In die CoolUriConf.xml habe ich folgendes geschrieben:

<pagenotfound>
      <status>HTTP/1.0 404 Not Found</status>
      <behavior type="redirect"><![CDATA[index.php?id=51]]></behavior>
</pagenotfound>

2. In die localconf.php folgendes:

$browser = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
$lang = substr($browser,0,2);

if( $lang == "de" ) {
	function user_checkLangDE()
	{ 
		return true;
	}
	function user_checkLangEN()
	{
		return false;
	}
	function user_checkLangFR()
	{ 
		return false;
	}
}
elseif( $lang == "en" ) {
	function user_checkLangDE()
	{
		return false;
	}
	function user_checkLangEN()
	{ 
		return true;
	}
	function user_checkLangFR()
	{ 
		return false;
	}
}
elseif( $lang == "fr" ) {
	function user_checkLangDE()
	{ 
		return false;
	}
	function user_checkLangEN()
	{
		return false;
	}
	function user_checkLangFR()
	{ 
		return true;
	}
}
else {
	function user_checkLangDE()
	{ 
		return true;
	}
	function user_checkLangEN()
	{
		return false;
	}
	function user_checkLangFR()
	{ 
		return false;
	}
}

3. Im TYPO3 Backend eine Seite namens "ErrorPage" [ID=31] angelegt. Subtitle/Alias kann leer bleiben.

Als Unterseiten von "ErrorPage" zwei Weitere namens "404-redirect" [ID=51] und "404" [ID=32] erstellt. In das Feld Subtitle/Alias für Seite "404" [ID=32] habe ich "404-de" eingetragen, für "404-redirect" [ID=51] habe ich bei Subtitle/Alias "404-redirect" eingetragen.

Danach mehrere Alternative Sprachen in "404" [ID=32] angelegt. Diese "Sprach Seiten" haben allesamt die Überschrift/Titel "404". Im Feld Subtitle/Alias habe ich wieder, je nach Sprache, "404-en" oder "404-fr" eingetragen, um diese eindeutig benennen und aufrufen zu können.

Anschließend habe ich die verschiedenen 404-Fehlermeldungen als Inhalt in den jeweiligen Sprachen erstellt.

4. In Seite "404-redirect" [ID=51] ein Template angelegt. Dort ins Setup folgendes:

# German
[globalString = IENV:HTTP_REFERER=*domain.de/de/*] || [userFunc = user_checkLangDE()]
config.additionalHeaders = Location: de/404-de
[end]

# English
[globalString = IENV:HTTP_REFERER=*domain.de/en/*] || [userFunc = user_checkLangEN()]
config.additionalHeaders = Location: en/404-en
[end]

# French
[globalString = IENV:HTTP_REFERER=*domain.de/fr/*] || [userFunc = user_checkLangFR()]
config.additionalHeaders = Location: fr/404-fr
[end]

Das war's.

Zusätlich kann man eventuell noch ein eigenes Template mit mehreren 404-Fehlermeldungen als Inhalt für "404-redirect" [ID=51] anlegen, falls der Redirect auf die jeweilige 404-Seite ( "404-de", "404-en" oder "404-fr" ) nicht funktioniert.

Gruß Jan

screenshot_1.jpg