Verbesserung 404 Page not found

Ich hab das ganze jetzt mal bei mir eingebaut, aber leider wird bei mir die tpl datei nicht geladen. Es wird lediglich die Suchfunktion aufgerufen und es erscheint der Text “Es konnten keine Artikel gefunden werden.”

Meine .tpl befindet sich im Verzeichnis “out/basic/tpl/atw_error_404.tpl”


function error_404_handler( $args )
{
        $args =  stripslashes( htmlentities( $args ) );
        $args = str_replace("/", "", $args);
        header("Location: http://www.xxxxxx.de/letsdeal/b2b/shop/index.php?cl=search&searchparam=$args&tpl=atw_error_404.tpl");
        exit();
}

Habs jetzt selber hinbekommen. Der Link lautet nun wie folgt:

http://www.xxxxxxx.de/letsdeal/b2b/shop/index.php?cl=info&tpl=atw_error_404.tpl

…und meine Error 404-Seite sieht so aus:


[{assign var="template_title" value="Error 404"}]
[{include file="_header.tpl" title=$template_title location=$template_title}]
[b]Error 404 - Seite nicht gefunden[/b]
[{ insert name="oxid_tracker" title=$template_title }]
[{include file="_footer.tpl"}]

Hallo,

die vier letzten Einträge waren der entscheidende Hinweis…

Danke Magnus, dass Du diese Funktion ausgegraben hast. Die Funktion mit der index.php habe ich zwar nicht hingekriegt (Fehler: Endlosschleife, der Browser stoppt, weil Seite nicht dargestellt werden kann).

Es geht auch noch einfacher in der functions.php:

function error_404_handler(){ header(“Location: http://www.xxxx.de/404error.html”); exit();}

Schnell eine HTML-Seite getippt und schon werden die Kunden mit einer sinnvollen Erklärung begrüsst.

Marco:

wir haben gerade von OSC umgestellt, sowohl Google als auch die Kunden haben Links gespeichert, die es nicht mehr gibt. Da ist die 404-Seite extrem wichtig.

Ich fände eine Lösung im Kundeninformation/CMS-Seiten am elegantesten…

GrüsseGregor

Der Sinn meiner Beiträge war es nicht einfach eine normale Fehlerseite anzeigen zu lassen, denn das hätte man auch schnell über .htaccess lösen können. Mir ging es in erster Linie darum, das die Fehlerseite mit dem Header und dem Footer im Shop-Frontend geladen wird. Klappt jedenfalls gut bei mir.

Das ging bei mir auch nicht (wie weiter oben beschrieben): die .htaccess wird an OXID ‘weitergeleitet’ und verhält sich dann anders.Mittlerweile habe ich aber auch die Lösung mit einer “anständigen” 404.tpl gemacht und das sieht besser aus und nützt auch, weil die Kunden sofort sehen, dass sie in unserem Shop sind.GrüsseGregor

Hallo,

noch eine Ergänzung zur Fehlerseite:

So wie in den letzten Kommentaren beschrieben, gibt die Fehlerseite einen HTML Status 200 (Seite gefunden) zurück. Das ist ja eigentlich nicht so gemeint, denn eigentlich brauche ich einen Statuscode 404 (Seite nicht gefunden). Dann würden die Suchmaschinen alte Links auch wirklich aus dem Index löschen.

Mit dem PHP-Befehl <?php header(“HTTP/1.0 404 Not Found”); ?> könnte man den Status-Code anpassen.

Kann mir jemand sagen, wo der Befehl hinkommen müsste und wie die Syntax ist? Geht das in dem Aufruf in der function.php mit einem ergänztem header-Befehl?

Danke,Gregor

Ps: Wer seine Statusmeldungen lesen möchte: http://gsitecrawler.com/tools/Server-Status.aspx

Moin,

versteh’ ich nicht:

Results of the GSiteCrawler Server-TestTested at 5/29/2009 10:26:58 AM / from 217.16.xxx.xx:URL=http://demoshop.oxid-esales.com/community-edition/blabla.htmlResult code: 404 (NotFound / Not Found)
Gruß


Marco Steinhäuser
Community Guide
OXID eSales AG
http://twitter.com/marcosteinhaeus

Hallo Marco,

es geht ja darum, die Fehlerseite zu optimieren. Für Menschen soll ein Text da sein (http://www.stempelmeer.de/gibs-nich)

und für die Suchmaschine den passenden HTML-Code:

URL=http://www.stempelmeer.de/gibs-nichResult code: 301 (MovedPermanently / Moved Permanently)New location: http://www.stempelmeer.de/gibs-nich/URL=http://www.stempelmeer.de/gibs-nich/Result code: 302 (Found / Moved Temporarily)New location: http://www.stempelmeer.de/index.php?cl=info&tpl=stpm_error_404.tplURL=http://www.stempelmeer.de/index.php?cl=info&tpl=stpm_error_404.tplResult code: 200 (OK / OK) <-- und da soll 404 hin

Grüsse

Gregor

Oh alles klar, sorry.


Marco Steinhäuser
Community Guide
OXID eSales AG
http://twitter.com/marcosteinhaeus

Hi,

das Verhalten, welches Gregor schildert, ist nicht gerade optimal.

Sicherlich könnte man eine Lösung bauen, welche dann die 404-er Seite auch als 404 ausgibt (Gedanke: abgeänderte header.tpl mit <?php header(“HTTP/1.0 404 Not Found”); ?> )

Mich stört aber noch das 301 und 302 gehabe davor. Das kann so irgendwie nicht gut sein, dass erst mittesl einem 301 oder 302 auf eine 404 verwiesen wird…

Das Standardverhalten sollte sein, dass sofort auf eine 404-er Seite mit korrektem Header verwiesen wird, wobei die Seite nicht “Page not found”, also so nackig wie im Standardfall sein sollte, sondern im Shopdesign mit korrekter Einbindung von _header, _left _right _footer.

Wo kommt eigentlich die “Page not Found” Meldung her, da habe ich jetzt noch gar nicht detailliert gesucht. Evtl. lässt sich aus der Meldung / Seite was bauen…

Viele Grüße Christian

Eine allgemeine Frage zu

<?php header(“HTTP/1.0 404 Not Found”); ?>

Ich könnte ja im OXID Adminbereich unter System -> Weitere Einstellungen auswählen, dass für “Wie soll man mit PHP-Code innerhalb von Smarty Templates umgehen” PHP ausführen gewählt ist. Dann könnte man der eigenen 404-Errorseite ja ein eigenes 404_header.tpl Template mit <?php header(“HTTP/1.0 404 Not Found”); ?> mitgeben und der korrekt Fehlercode wird ausgegeben.

Was mache ich mir denn mit der Einstellung bzgl. PHP in Smarty ausführen für neue Baustellen auf? Sicherheitsprobleme? Performance?

Viele Grüße Christian

Ist das nicht ein bißchen kompliziert?
Man kann doch in der php-Funktion error_404_handler (modules/functions.php) den richtigen Header 404 für die Suchmaschinen schicken und darunter den Inhalt der gewünschten Zielseite für die Nutzer einbinden, etwa so:


function error_404_handler( $args )
{
    header('HTTP/1.1 404 NOT FOUND');
    echo file_get_contents('http://www.domainname.de/Content-not-found-Error-404/');
    exit();        
}  

Kurze Info: Das funktioniert mit OXID ab Version 4.5.1 nicht mehr, da hier eien Funktion mit gleichem Namen für das Bilderhandling zuständig ist.

Wir sind an einer Lösung dran.

Gruß Joscha

Hi,

warum sollte das nicht mehr funktionieren?
Wir nutzen CE 4.5.2 und leiten lieber per 301 auf die startseite um statt eine 404-Seite zu zeigen. Fehlende css, js, und Bilder werfen nach wie vor ein 404.


/**
 * modules/functions.php
 *
 * Override error_404_handler, redirect per 301
 *  
 */
if ( !function_exists( 'error_404_handler' ) ) {
    
    /**
     * error_404_handler - handler für 404 (page not found) fehler
     * wir nutzen aber aus usability gründen eine 301 Weiterleitung zur Startseite
     * getparam ?redir=404 optional, zum tracken oder debuggen, kann auch weggelassen werden
     * @param string $sUrl - optional - aufgerufene url, welche den fehler auslöste
     * @return void
     */
    function error_404_handler($sUrl = '')
    {
    	header("HTTP/1.1 301 Moved Permanently");
		header("Location: /?redir=404");
		header("Connection: close");
		
        exit();
    }
}