E-Mail-Benachrichtigung von 404-Fehlern mit webEdition

In webEdition ist es möglich in den Einstellungen eine Fehlerseite für 404 Fehler (Seite nicht gefunden) anzugeben. Bei dieser Fehlerseite handelt es sich um ein webEdition internes Dokument, wodurch sich alle Möglichkeiten der Template-Programmierung (webEdition Tags und PHP-Code) nutzen lassen. Ein sinnvolles Anwendungsbeispiel ist die automatische Benachrichtigung per E-Mail, wenn ein URL-Aufruf zu einem 404 Fehler führt.

404 Fehlerseite erstellen

Zunächst erstellen wir eine neue Vorlage über Datei > Neu > Vorlage. Diese Vorlage speichern wir mit folgendem Code als 404.tmpl ab.

<?php
/**
* Original by http://wp-mix.com/wordpress-404-email-alerts/
*/

$_404SiteName = "domain.tld"; //default
$_404Referer = "undefined";
$_404Request = "undefined";
$_404Querystring = "undefined";
$_404RemoteAddress = "undefined";
$_404RemoteIdent = "undefined";
$_404UserAgent = "undefined";

// sanitize
function clean($string) {
$string = rtrim($string);
$string = ltrim($string);
$string = htmlentities($string, ENT_QUOTES);
$string = str_replace("\n", "<br>", $string);

if (get_magic_quotes_gpc()) {
$string = stripslashes($string);
}
return $string;
}

// site info
if(isset($_SERVER['HTTP_HOST'])) $_404SiteName = clean($_SERVER['HTTP_HOST']);

// referrer
if(isset($_SERVER['HTTP_REFERER'])) $_404Referer = clean($_SERVER['HTTP_REFERER']);

// request URI
if(isset($_SERVER['REQUEST_URI']) && isset($_SERVER["HTTP_HOST"])) $_404Request = clean('http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);

// query string
if(isset($_SERVER['QUERY_STRING'])) $_404Querystring = clean($_SERVER['QUERY_STRING']);

// IP address
if(isset($_SERVER['REMOTE_ADDR'])) $_404RemoteAddress = clean($_SERVER['REMOTE_ADDR']);

// user agent
if(isset($_SERVER['HTTP_USER_AGENT'])) $_404UserAgent = clean($_SERVER['HTTP_USER_AGENT']);

// identity
if(isset($_SERVER['REMOTE_IDENT'])) $_404RemoteIdent = clean($_SERVER['REMOTE_IDENT']);

// log time
$_404Time = clean(date("F jS Y, h:ia", time()));

$_404message =
'TIME: ' . $_404Time . "\n" .
'*404: ' . $_404Request . "\n" .
'SITE: ' . $_404SiteName . "\n" .
'REFERRER: ' . $_404Referer . "\n" .
'QUERY STRING: ' . $_404Querystring . "\n" .
'REMOTE ADDRESS: ' . $_404RemoteAddress . "\n" .
'REMOTE IDENTITY: ' . $_404RemoteIdent . "\n" .
'USER AGENT: ' . $_404UserAgent . "\n\n\n";

//Ausgabe ins webEdition Error-Log mit optionalen E-Mail-Versand
t_e('error',$_404message);
?>


Als nächstes erstellen wir ein neues webEdition Dokument auf Basis der zuvor erstellen Vorlage. Dazu rufen wir Datei > Neu > webEdition-Seite > Leere Seite auf. Als Dateinamen geben wir 404 ein. Bei Vorlage wählen wir das als 404.tmpl gespeicherte Template aus und aktivieren die Checkbox Seite dynamisch generieren. Nun veröffentlichen wir das Dokument.

Fehlerseite in den Einstellungen aktivieren

Jetzt müssen wir das eben erstellte webEdition Dokument als Fehlerseite in den Einstellungen angeben. Dazu öffnen wir die Einstellungen über Extras > Einstellungen > Allgemein und wechseln in den Reiter SEO-Links. Am Ende finden wir dann die Einstellung Fehlerseite für nicht existierende Objekte, wo wir nun das webEdition Dokument 404.php zuweisen.

Falls noch nicht vorhanden, erstellen wir außerdem eine .htaccess Datei (über Datei > Neu > Sonstige > .htaccess-Datei) mit folgendem Inhalt und speichern sie direkt im Document-Root ab. Mit der .htaccess Datei weisen wir den Server an, alle URL-Aufrufe, die nicht auf ein Verzeichnis oder eine Datei verweisen an webEdition weiterzuleiten – auch im 404 Fehlerfall.

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /webEdition/redirectSEOurls.php [L]
ErrorDocument 404 /webEdition/redirectSEOurls.php



404 Fehler ins webEdition Error-Log und/oder per E-Mail versenden

An dieser Stelle sind wir bereits mit der Implementierung fertig. Wenn der PHP-Code 1-zu-1 übernommen wurde, werden 404 Fehler über das webEdition Error handling verarbeitet. Dies geschieht über die Funktion t_e() und setzt voraus, dass die webEdition Fehlerbehandlung in den Einstellungen unter Extras > Einstellungen > Allgemein im Reiter Fehlerbehandlung aktivert wurde (siehe Abbildung). Dabei lässt sich festlegen, ob die Fehler im Error-Log gespeichert und/oder per E-Mail versandt werden sollen.

powered by webEdition CMS