Nicht...?
Na gut, hab ich´s also selbst gemacht!
kurze Beschreibung:
1. TYPO3 mitteilen das es eine USER_FUNCTION für das pageNotFound_handling gibt
2. In dieser den Referer und die aufzurufende Seite auslesen
3. Informationen in eine neue Tabelle (z.B. error_404) eintragen
4. cronjob einrichten der ein weiteres Skript für den Statusbericht aufruft
5. fehlerhafte Links in .htaccess umleiten
Wenn man konsequent die falschen URLs in der .htaccess umleitet, sollten nach einiger Zeit alle fehlerhaften Links verschwinden.
Für einen Relaunch einer Internetseite mit neuer Seitenstruktur sehr zu Empfehlen!
Erweiterungen der localconf.php
[FE][pageNotFound_handling] = USER_FUNCTION:fileadmin/develop/php/pageNotFoundHandling.php:user_pageNotFound->pageNotFound
[FE][pageNotFound_handling_statheader] = HTTP/1.0 404 Not Found
Aufbau der pageNotFoundHandling.php:
<?php
require_once(PATH_tslib.'class.tslib_pibase.php');
class user_pageNotFound {
function pageNotFound($param,$ref) {
$host = $_SERVER['SERVER_NAME'];
$requestedPage = $param['currentUrl'];
$refererPage = $_SERVER['HTTP_REFERER'];
$errorPage = "/404-seite.html"; // entsprechend anpassen
$timestamp = time();
$fields_values = array(
'page' => $requestedPage,
'referer' => $refererPage,
'tstamp' => $timestamp
);
$res = $GLOBALS['TYPO3_DB']->exec_INSERTquery('error_404', $fields_values, FALSE);
header("HTTP/1.0 404 Not Found");
if($res) {
header("Location: http://$host$errorPage");
}
}
}
?>
Aufbau der errorReport.php:
<?php
require_once(PATH_tslib.'class.tslib_pibase.php');
function sendErrorMail() {
$timestamp = time();
$mailTo = 'adresse@domain.tld';
$mailSubject = '404-Seite aufgerufen';
$mailText = 'Die folgenden Fehlerseiten wurden aufgerufen:'."\n\n";
$mailHeader = 'From: 404-Seite@domain.tld' . "\r\n";
$where = 'tstamp < '.$timestamp.' AND checked = 0';
# Get elements from DB
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','error_404',$where,'','','');
$count = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
if($count > 0) {
while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
$mailText .= 'Ursprungsseite: '.$row['referer']."\t".'Zielseite: '.$row['page']."\n";
}
$mailText .= "\n".'Hinweis: Die Ursprungsseite kann nur ausgelesen werden, wenn auf einen Link geklickt wurde und der Benutzer die Option nicht deaktiviert hat.'."\n";
$mailText .= "\n".'Sie können die falschen Links in der .htaccess eintragen um sie korrekt umzuleiten'."\n";
$mailText .= 'Beispiel: Redirect permanent /falscheUrl.html http://www.domain.de/richtigeUrl.html'."\n";
$mailText .= 'Wichtig: Die aufgerufene Seite muss unbedingt als absoluter Pfad angegeben werden!'."\n\n";
if(@mail($mailTo, $mailSubject, $mailText, $mailHeader)) {
echo 'mail gesendet...';
$where = "checked = 0 AND tstamp < $timestamp ";
$fields_values = array(
'checked' => 1
);
// gesendete Einträge markieren
$marked = $GLOBALS['TYPO3_DB']->exec_UPDATEquery(
'error_404',
$where,
$fields_values,
FALSE
);
if($marked) {
echo 'und Einträge markiert';
}
// gesendete Einträge löschen
// $GLOBALS['TYPO3_DB']->exec_DELETEquery('error_404','tstamp <'.$timestamp);
}
} else {
echo 'keine neuen Einträge vorhanden';
}
}
?>
Für Anregungen/Erweiterungen bin ich wie immer dankbar!
Gruß, Daniz