Zum Inhalt springen

404 Fehlerseiten und Referer mitloggen

Erstellt am 11. Juli 2008 · 12 Antworten · letzte Antwort am 26. August 2008

Tags: Frage

typo3tester ·

Ich mache das mit TYPO3-externem awstats.
Das müßte doch die awstats-Extension auch können, oder?
Gruß, Regina

einpraegsam.​net ·

Awstats habe ich installiert und funktioniert auch schon mal prinzipiell.
Obwohl ich eine nicht-existierende Seite aufgerufen habe, erscheint nichts unter dem Punkt "HTTP Fehlercodes"

Der Headercode 404 wird auf jeden Fall ausgegeben

Jemand Erfahrungswerte hier?

daniz78 ·

Gibt es hier schon News?

Ich würde gerne die nicht-existierenden Seiten in einer Tabelle speichern um sie später umzuleiten!

Gruß, Daniz

daniz78 ·

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&auml;ge markiert';
			}

			// gesendete Einträge löschen
			// $GLOBALS['TYPO3_DB']->exec_DELETEquery('error_404','tstamp <'.$timestamp);
		}

	} else {
		echo 'keine neuen Eintr&auml;ge vorhanden';
	}
}

?>

Für Anregungen/Erweiterungen bin ich wie immer dankbar!

Gruß, Daniz

daniz78 ·

Danke für den Ansporn!

Werde es diese Woche wohl nicht schaffen aber wenn Interesse besteht könnte ich die Mini-Extension nächste Woche in Angriff nehmen!

d.​walter ·

Da hast du vollkommen Recht einpraegsam ist auch meine Meinung!

Und daniz selbst wenn du es erst in drei Wochen schaffen solltest, ist es trotzdem klasse von dir das du der Community was von deiner Zeit und deinem Wissen "opferst".

Daniel

PS: Info an Mittwald: Ich hätte gern ein smiley mit Daumen hoch!! 😃

einpraegsam.​net ·

Habs mal in ähnlicher Form in einer Extension umgesetzt:
http://typo3.org/extensions/repository/view/wt_404log/0.1.1/

So lange das Manual noch nicht gerendert ist -
Das muss in die localconf.php damit die Extension läuft (wenn wt_404log eine locale Extension):

$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = 'USER_FUNCTION:typo3conf/ext/wt_404log/pi1/class.tx_wt404log_pi1.php:tx_wt404log_pi1->main';	//  Modified or inserted by TYPO3 Install Tool.