Skip to content

404-Behandlung in Serendipity (2. Teil)

Ursprünglich war der folgende Beitrag bereits für den 11.06.2010 geplant, aber es hat sich leider ein wenig verzögert…

Ich greife das Thema nochmals auf, da mir der Kommentar von onli keine Ruhe gelassen hat wink

Da ich sowieso das S9Y-Plugin Statische Seiten (serendipity_event_staticpage) nutze, habe ich mir eine neue statische Seite mit dem Namen 404 (was sonst wink ) angelegt.

In der Datei .htaccess braucht man jetzt nur noch die relevante Zeile wie folgt abändern:

ErrorDocument 404 /index.php?serendipity[subpage]=404

Schon wird für ungültige Links das übliche Design inkl. aller Plugins/Suchfunktion/etc geladen und die vorher erstellte statische Seite angezeigt.

Und weil ich eh schon dabei war, habe ich mir noch das Template plugin_staticpage_related_category.tpl geschnappt, kopiert und allen unnützen Krempel entfernt, den man meines Erachtens auf einer festen Seite nicht benötigt.

Soweit war meine Theorie, allerdings scheiterte es an einem schlichten Problem: Wenn die 404-Statusseite aufgerufen wird, sendet Serendipity den HTTP-Statuscode 200, was dem besuchenden Programm mitteilt, dass die Seite existieren würde. Das ist insofern fatal, da Suchmaschinen sich an diesem Statuscode orientieren und die Seite bei 200 indexieren würde. Erhält die Suchmaschine dagegen den Code 404, wird die nicht existierende Adresse aus dem Such-Index gelöscht bzw. ignoriert.

Ab hier steigen wir dann mit der Ergänzung von heute ein wink

Heute gab es nun durch Garvin Hicking, einen der Programmierer hinter Serendipity, einen Lösungsansatz für mein Problem. Man braucht ein zusätzliches Event-Plugin, welches beim Aufruf einer bestimmten Seite den Status-Code ändert.

Meine endgültige Lösung, wie sie nach einigem hin und her mit Garvin nun funktioniert, sieht wie folgt aus und liegt unter /plugins/serendipity_event_404hook/serendipity_event_404hook.php

<?php
class serendipity_event_404hook extends serendipity_event {
    function introspect(&$propbag) {
        global $serendipity;
        $propbag->add('name',          '404 hook');
        $propbag->add('description',   '');
        $propbag->add('requirements',  array('serendipity' => '1.5', 'smarty' => '2.6.7', 'php' => '4.1.0'));
        $propbag->add('version',       '0.1');
        $propbag->add('author',        'Garvin Hicking');
        $propbag->add('event_hooks',   array('entries_header' => true));
    }

    function event_hook($event, &$bag, &$eventData, $addData = null) {
        global $serendipity;
        if ($event == 'entries_header' && $GLOBALS['serendipity']['GET']['subpage'] == '404') {
            serendipity_header('HTTP/1.0 404');
            serendipity_header('Status: 404 Not Found');
        }
        return true;
    }
}

Zu beachten ist natürlich, in Zeile 17 den richtigen Namen der Seite einzutragen, falls sie bei euch anders heißen sollte.

Schlussendlich funktioniert es also jetzt so, wie ich es mir von Anfang an gewünscht hatte.

Mein Dank geht daher nochmals ganz besonders an Garvin, der meine ständige Nachfragerei ausgehalten hat laugh

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

SebiF am :

Schöner Beitrag, hat mir sehr geholfen.
In deinem Code fehlen übrigens in der Zeile “$event ‘entries_header’ && $GLOBALS[‘serendipity’][‘GET’][‘subpage’] ‘404’” zwei Gleichheitszeichen.

Viele Grüße, Sebi

Bernd am :

Danke für den Hinweis!

Da das statische-Seiten-Plugin inzwischen selbst über eine 404-Funktion verfügt, habe ich diese Variante aber gar nicht mehr am laufen, geht nun viel einfacher indem man einfach einen Haken setzt laugh

Die Geschichte mit der .htaccess und der zusätzlichen Plugin fällt damit weg. Ein eigenes Template kann man sich dafür natürlich trotzdem basteln.

Kommentar schreiben

Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Textile-Formatierung erlaubt
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Um einen Kommentar hinterlassen zu können, erhalten Sie nach dem Kommentieren eine E-Mail mit Aktivierungslink an ihre angegebene Adresse.
:'(  :-)  :-|  :-O  :-(  8-)  :-D  :-P  ;-) 
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
Formular-Optionen
tweetbackcheck