Das wird dadurch erreicht, dass, wenn der "sprechende url" in der Datenbank nicht gefunden werden kann, auf die Fehlerseite weitergeleitet wird.
Sieht man sich die HTTP-header an, zeigt sich folgendes Bild:
Der erste HTTP-Header ist ein "error 302 moved temporarily", erst danach kommt von der error_404.php ein "error 404 not found". Der url im Browser wechselt dann auch zu dieser Adresse und zeigt meinshop.xx/themes/error/error_404.php an.
Das hat zwei Nachteile: Suchmaschinen erhalten nicht die "richtige" Information (erst 302, dann 404, was macht man damit?) und Benutzer können ihre Eingabe in die Adresszeile nicht mehr kontrollieren, weil ja jetzt die Adresse der Fehlerseite drin steht.
Das lässt sich aber leicht korrigieren:
in der /bootstrap.php müssen die Zeilen 130 und 135 folgendermaßen angepasst werden:
- Code: Alles auswählen
} else {
//header('Location: ' . URLPFAD . 'themes/error/error_404.php');
include_once(DATEIPFAD . 'themes/error/error_404.php');
exit;
}
} else {
//header('Location: ' . URLPFAD . 'themes/error/error_404.php');
include_once(DATEIPFAD . 'themes/error/error_404.php');
exit;
}
Dabei wird die Umleitung (header('location: ...) durch die zwei Schrägstriche auskommentiert. Damit fällt die Umleitung weg und damit auch der moved temporarily -Header.
Die zweite Zeile muss reingeschrieben werden und sorgt dafür, dass der Inhalt der error_404.php geladen und angezeigt wird. Von der error_404.php wird der error 404 Header ausgegeben, jetzt als erster und korrekter Header. Die Fehlerseite wird damit auch angezeigt.
Und weil ja keine Umleitung mehr stattfindet, bleibt die vom Benutzer eingegebene Adresse erhalten
Übrigens ist diese Technik in der gesamten bootstrap.php angewandt.
Und weil sich die bootstrap.php seit der version 1.5 nicht mehr geändert hat, lässt sich das auch bei allen randshop Versionen bis zur aktuellen 2.3 genau so anwenden.
viele Grüße
magnus