Fehlerseite
Verschiedene Möglichkeiten mit 404 Fehlern umzugehen.
Standard Fehlerseite
Für die Standard Konfiguration im Install tool -> All Configuration die URL der Fehlerseite eintragen für [pageNotFound_handling].
Mehrsprachige Fehlerseiten mit Real URL
Wenn RealUrl und Mehrsprachigkeit verwendet werden soll, muss typo3conf/localconf.php editiert werden und die Sektion [pageNotFound_handling] mit folgenden Code ersetzt werden:
if (substr($_SERVER['REQUEST_URI'], 0, 4) == '/en/') {
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] =
'/en/system-pages/notfound.html';
} else {
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] =
'/de/system-pages/notfound.html';
}
Workaroud für einen Bug: Anzeige einer leeren Fehlerseite
Ich hatte einen Bug den ich nie identifizieren konnte: wenn ich eine URL eingetragen habe in pageNotFound_handling hat dies nicht funktioniert sondern es wurde nur eine leere Seite angzeigt.
Der einzige Ausweg war folgendes in [pageNotFound_handling] einzutragen:
USER_FUNCTION:typo3conf/pageNotFoundHandling.php:user_pageNotFound->pageNotFound
Die Function typo3conf/pageNotFoundHandling.php hat folgenden Code:
<?
class user_pageNotFound {
function pageNotFound ($param,$ref) {
$url = '/fehler.html';
header('location:'.$url);
exit();
}
}
?>
In TYPO3 4.1.* tritt der Fehler nicht mehr auf.
Dynamische Fehlerseite
Zur Anzeige einer dynamischen Fehlerseite wird die bereits oben beschriebene User Funktion verwendet mit folgenden Eintrag:
USER_FUNCTION:fileadmin/scripts/pageNotFoundHandling.php:
user_pageNotFound->pageNotFound
Das Script holt jedoch den Dateinamen aus der URL und übergibt diesen als Parameter an die Fehlerseite. Diese enthält ein Suchfeld der Indexed Search was dazu führt dass eine Suche nach dem Dateinamen durchgeführt wird und die Ergebnisse angezeigt werden.
<?php
/**
* Creates a error page redirect
*/
class user_pageNotFound {
function pageNotFound($param,$ref) {
$searchexp = ($param[currentUrl]);
$searchexp = basename($searchexp,".html");
$searchexp = strip_tags($searchexp);
$url = "/system-pages/notfound.html?tx_indexedsearch[sword]="
.$searchexp;
header('location:'.$url);
exit();
}
}
?>
Nachtrag / Verbesserung
Google hat sich beschwert (Webmaster Tools) dass die Fehlerseite den Code 200 Zurückgibt statt 400. Nun den eine neue Variante des Scriptes mit Javascript Redirect.
Ausserdem auch noch im der Website angepasstem Design (mit Stylesheet)
<?php
define('REDIRECTPAGE', 'system-pages/notfound.html');
define('BASEPATH', '/');
define('STYLESHEET', 'fileadmin/css/knolledge.css');
/**
* Creates a error page redirect
*/
class user_pageNotFound {
function pageNotFound($param, $conf) {
// Search Expression
$searchexp = ($param[currentUrl]);
$searchexp = basename($searchexp,".html");
$searchexp = strip_tags($searchexp);
$urlparameters = "?tx_indexedsearch[sword]=" . $searchexp;
// Redirect
$server_name = $_SERVER['SERVER_NAME'];
header("HTTP/1.0 404 Not Found");
print '
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="content_box-Type" content_box="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="' . BASEPATH . STYLESHEET . '" media="all" />
<title>Seite nicht gefunden</title>
<meta name="generator" content_box="TYPO3 4.0 CMS" />
<SCRIPT LANGUAGE="JavaScript">
<!--
function doRedirect() {
window.location="http://'.$server_name . BASEPATH . REDIRECTPAGE. $urlparameters .'";
}
doRedirect();
// -->
</script>
</head>
<body>
<div id="rsys_shade">
<div id="page_box">
<div id="navigation_box_level1">
<div id="rsys_logo">
</div>
</div>
<div id="header" >
</div>
<div id="navigation_box_level2">
</div>
<div id="content_box_1">
<h1>Seite nicht gefunden</h1>
<p>Die von ihnen angeforderte Seite wurde nicht gefunden</p>
<p>Wenn sie nicht innerhalb von 3 Sekunden weitergeleitet werden klicken sie auf folgenden Link:<br>
<a href="http://'.$server_name . BASEPATH . REDIRECTPAGE . $urlparameters . '">'.$server_name.'</a></p>
</div>
</div>
<div id="footer">
</div>
</div>
</body>
</html>
';
exit;
}
}
?>
Aber ob dieser Code sicher ist weiss ich nicht so genau, wenn jemand dazu etwas sagen könnte wäre ich dankbar dafür! Kontakt
Fehlerseite und RealURL
Habe ewig gesucht weil Fehlerseite nicht angezeigt wurde. Grund: RealURL Konfiguration
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
'init' => array(
'enableCHashCache' => 1,
'appendMissingSlash' => 'ifNotFile',
'enableUrlDecodeCache' => 1,
'enableUrlEncodeCache' => 1,
'respectSimulateStaticURLs' => 0,
'postVarSet_failureMode'=>'',
postVarSet_failureMode war auf 1, was alle Fehler auf die tieferliegende Seite umleitet und meine Fehlerroutine ausgeschaltet hat.
Alte TYPO3 Versionen: Fehler und cms_showpic
Mir ist aufgefallen, dass im Google Index Bilder sind, die schon lange gelöscht wurden. Dies sind allesamt Bilder, die mit ?eID=tx_cms_showpic angezeigt werden (bzw. wurden). Nun ist es so, dass das aufgerufene Skript typo3/sysext/cms/tslib/showpic.php im Falle eines nicht existierenden Bildes eine UnexpectedValueException auslöst. Diese wiederum wird von t3lib/error/class.t3lib_error_productionexceptionhandler.php behandelt.
Das sieht dann so aus:
Oops, an error occured!
Parameter Error: No file or no parameters given.
(oder Parameter Error: Wrong parameters sent.)
Das unschöne dabei ist, dass der Code 500 Internal Server Error zurückgegeben wird - und in diesem Fall nimmt es Google nicht aus dem Index. Hier findet man ca 280.000 Einträge von indizierten Fehlern in Google wenn man nach "eID=tx_cms_showpic Parameter Error" sucht. Das gefällt mir nicht.
Ich habe dazu die entsprechende Stelle im TYPO3 Sourcecode editiert und gebe den Fehlercode 404 zurück, damit das Bild aus dem Suchindex verschwindet. Nachteil: Alle Exceptions lösen nun diesen Code aus statt 500.
Workaround
Editieren von error/class.t3lib_error_productionexceptionhandler.php
public function echoExceptionWeb(Exception $exception) {
if (!headers_sent()) {
header("HTTP/1.0 404 Not Found"); // rsys removed: header("HTTP/1.1 500 Internal Server Error");
}