CM-Marketing.de
Avatar CM-Marketing.de
Themenersteller
Neuling (9 Beiträge)

Individuelle Fehlerseite

am 19.12.2012, 16:27 Uhr eröffnete CM-Marketing.de folgenden Thread
OnPage Optimierung    4763 mal gelesen    19 Antwort(en).

Guten Tag,

beim Seitenreport zu meiner Webseite erhalte ich bezüglich einer individuellen Fehlerseite lediglich 50% Punkte und für das Zurückgeben des 404 bei einer nichtvorhandenen Seite 0% Punkte. Jedoch weiß ich mir keinen Rat, dies zu verbessern.

Die Weiterleitung zur Fehlerseite setze ich im folgendem um:


// Seiteninhalt
function artikel($conid)
{
$aufgerufene_url = array_pop(explode("/", $_GET['url']));
if(!isset($aufgerufene_url) || empty($aufgerufene_url) || strpos($aufgerufene_url, '.html') === FALSE)
{
// Artikel-Alias für die Startseite
$alias = "startseite";
}
else
{
$alias = array_shift(explode(".", $aufgerufene_url));
}
if($conid)
{
// Artikel mit dem entsprechenden Alias auslesen
$result = @mysql_query("
SELECT
`id`,
`inhalt`,
`etc`
FROM `artikel`
WHERE `alias` = '". mysql_real_escape_string($alias) ."'
", $conid);
if(@mysql_num_rows($result) == 1)
{
while($zeile = mysql_fetch_array($result))
{
$datensatz['id'] = $zeile['id'];
$datensatz['inhalt'] = $zeile['inhalt'];
$datensatz['etc'] = $zeile['etc'];

}
}
// Weiterleitung zur Fehlerseite
else
{

header('Location: '. $_SERVER['SERVER_NAME'] .'/fehler.html');


}
mysql_free_result($result);
return $datensatz;
}
}

Des weiteren habe ich in der .htaccess bereits folgende Varianten durchprobiert:
ErrorDocument 404 /fehler.html oder
ErrorDocument 404 http:domain.de/fehler.html

beides ohne Erfolg oder "spürbare" Änderung.

Meine aktuelle .htaccess sieht wie folgt aus:


RewriteEngine on

RewriteCond %{HTTP_HOST} !^domain.de [NC]

RewriteRule ^(.*) domain.de/$1 [R=301,L]


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

RewriteRule ^(.*)$ index.php?url=$1 [L,NC,QSA]


An welche Stelle muss ich "ErrorDocument 404" einbauen oder spielt dies keine Rolle?

Vielen Dank für Eure Unterstützung
Marco Dittmer


Internetagentur CM-Marketing.de aus Braunschweig
Online-Dienstleister
http://cm-marketing.de/

hansen
Foren Moderator
Content Gott (1886 Beiträge)
am 19.12.2012, 17:06 Uhr schrieb hansen

Hallo Marco,

in der in der .htaccess funktioniert das bei mir einwandfrei:
ErrorDocument 404 /Fehlerseite-404.htm (Fehlerseite im Hauptordner)
Wenn die Fehlerseite noch einen Link hat, mit der der Besucher wieder auf eine gültige Seite zurückkommt, ist die dann auch individuell.

Gruß
hansen


Nepal Rundreisen

CM-Marketing.de
Avatar CM-Marketing.de
Neuling (9 Beiträge)
am 19.12.2012, 17:24 Uhr schrieb CM-Marketing.de

Nun, dazu eine Frage. Legst Du Deine individuelle Fehlerseite als eigenständige HTML-Seite an? Weil ich rufe meine ja direkt über das Web-CMS auf. Das bedeutet, ich lege diese wie jede andere Seite in der Datenbank an und rufe diese dann über angegebenes Skript auf. Wird eine Seite in der DB nicht gefunden, so wird ja auf die fehler.html weitergeleitet.


Internetagentur CM-Marketing.de aus Braunschweig
Online-Dienstleister
http://cm-marketing.de/

hansen
Foren Moderator
Content Gott (1886 Beiträge)
am 19.12.2012, 17:30 Uhr schrieb hansen

Ich habe eine eigene HTM - Seite (ohne L) angelegt.

Gruß
hansen


Nepal Rundreisen

CM-Marketing.de
Avatar CM-Marketing.de
Neuling (9 Beiträge)
am 19.12.2012, 18:07 Uhr schrieb CM-Marketing.de

Nun ja, auch wenn ich eine extra HTML-Fehlerseite anlege, ändert es nichts am Ergebnis. Warum auch? Ich habe schließlich eine Weiterleitung (warum gibt es dafür 50%) und eine individuelle Fehlerseite, samt Link zurück zur Startseite. Sobald eine Webseite aufgrufen wird, die nicht existiert wird domain.de/fehler.html aufgerufen. Ist doch Benutzerfreundlichkeit gegeben?


Internetagentur CM-Marketing.de aus Braunschweig
Online-Dienstleister
http://cm-marketing.de/

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 19.12.2012, 18:25 Uhr schrieb joerg

CM-Marketing.de schrieb:

Wird eine Seite in der DB nicht gefunden, so wird ja auf die fehler.html weitergeleitet.



Hallo Marco

Und das ist der Grund warum das nicht funktionieren kann. Das erzeugt eine Weiterleitung und keinen HTTP Code 404.

An dieser Stelle muss du deine bisherigen Ausgaben verwerfen und den Inhalt der Fehlerseite includen. Etwaqige Header die bereits gesetzt sind sind eine weitere Fehlerquelle. Aber mit der richtigen PHP Version auch kein Problem mehr.

Am geschickesten geht das über absolute Pfade unter PHP.

Davor halt eben noch einen 404er Status Code senden und die Sache ist ausgestanden.

define(\'ROOT\',dirname($_SERVER[\'DOCUMENT_ROOT\']));
header(\'Status: 404\');
include_once ROOT.\'/404.php\';


Man kann den Header in der Regel auch in die Datei verschieben die man includet.

Da aber weiterhin ein Problem für die Seiten besteht die über PHP nicht abgefangen werden ist die zusätzliche Lösung auch über htaccess nötig ausser in den Fällen wo jede Anfrage über PHP geht.

Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

CM-Marketing.de
Avatar CM-Marketing.de
Neuling (9 Beiträge)
am 19.12.2012, 18:45 Uhr schrieb CM-Marketing.de

Hallo Jörg!

Vielen Dank für Deine aussagekräftige Antwort. Die angesprochene Problematik erschließt sich mir. Nur weiß ich nicht genau, wie ich den von Dir vorgeschlagenen Programmcode einbinden soll. Ich habe jetzt schon einige Varianten durchprobiert. Auch bin ich mir nicht sicher, wie genau der Include der 404.php stattfindet. Soll dieser anstelle des Artikels aus der Datenbank eingebunden werden oder wird die 404-Seite seperat aufgerufen.

In der Variante, die ich versucht habe, erhalte ich folgende Fehlermeldung:
Warning: include_once() [function.include-once]: open_basedir restriction in effect. File(/www/htdocs/404.php) is not within the allowed path(s): (/www/htdocs/w00dd1ec/:/tmp:/usr/bin:/www/htdocs/w00dd1ec:/bin:/usr/local/bin:/usr/share/php) in /www/htdocs/w00dd1ec/include/funktionen.inc.php on line 78

Warning: include_once(/www/htdocs/404.php) [function.include-once]: failed to open stream: Operation not permitted in /www/htdocs/w00dd1ec/include/funktionen.inc.php on line 78

Warning: include_once() [function.include]: Failed opening \'/www/htdocs/404.php\' for inclusion (include_path=\'.:/usr/share/php:..\') in /www/htdocs/w00dd1ec/include/funktionen.inc.php on line 78


Internetagentur CM-Marketing.de aus Braunschweig
Online-Dienstleister
http://cm-marketing.de/

hansen
Foren Moderator
Content Gott (1886 Beiträge)
am 19.12.2012, 18:46 Uhr schrieb hansen

Es gibt bestimmt 1000 Gründe, warum man eine Fehlerseite mittels PHP-Abfrage ausgibt, es will sich mir aber nicht so recht erschließen.
Diese Abfrage wird doch standardmäßig schon von den Suchmaschinen gemacht und analysiert, warum dann dieser Spagat?
Eigene Fehlerseite + .htaccess sollte doch vollkommen ausreichen.
Lass mich da aber gerne belehren (in verständlichen Sätzen :lol.

Gruß
hansen


Nepal Rundreisen

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 19.12.2012, 19:11 Uhr schrieb joerg

Hallo Hannelore

Siehe zum Beispiel Wikipedia wo eine Datenbankabfrage im CMS darüber entscheidet ob eine Seite vorhanden ist.

Das kann man dann auch erweitern dadurch das eine Seite mal vorhanden war und dann ein 410er gesendet wird durch das CMS.

Das Problem ist du kannst in diesen Fällen nicht per htaccess unterscheiden ob die Seite vorhanden ist. Grund hierfür ist eine universelle Weiterleitung innerhalb des CMS.

Also bleibt als Alternative das dann per PHP zu regeln ob ein Eintrag vorhanden war in der Datenbank oder nicht. In diesem Beispiel das wir hier sehen ist so ein Fall gegeben das beides notwendig ist.

Ausser in den Fällen wo alles was nicht vorhanden ist als Datei schon per htaccess an PHP übergeben wird. Im Prinzip kann man alles an PHP übergeben und danach auch wieder aufbauen so das man nur eine Zeile in der htaccess benötigt.

Wird ganz lustig wenn man jede Datei über PHP und Datenbank erzeugt. Ist aber technisch machbar mit einen Template selbst Textdateien so zu erzeugen.

Ist nur die Frage ob das dann zum Beispiel für eine robots.txt auch Sinn macht. In dem Fall wäre mir der Aufwand echt zu hoch.

Der zweite Fall der mir einfällt ist eine URL mit sichtbaren Parametern. Hier kann man soweit gehen das man diese Parameter überprüft. Wenn Parameter nicht eingeplant sind oder auch eine falsche Reihenfolge verwendet worden ist kann man so vorgehen.
Im Grunde handelt es sich bei dem Wikipedia Beispiel auch nur um einen Parameter ob eine Seite zu dem Titel der Seite vorhanden ist.
Nur es gibt halt eben auch Fälle, wo man Parameter ohne Datenbank erzeugt.

Ich kann hier einige Beispiele bei meinen Domains nennen wo ich diese Technik einsetze. Auch wenn da nicht immer ein 404 sondern auch mal eine Weiterleitung entsteht.

Auf 1000 Gründe wird man nicht kommen. Im Grunde ist es nur ein Grund der Einsatz von Parametern.

Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

hansen
Foren Moderator
Content Gott (1886 Beiträge)
am 19.12.2012, 19:22 Uhr schrieb hansen

Hallo Jörg,

an Wikipedia und Facebook z.B. habe ich dabei auch gedacht, aber bei weniger als 1000 Seiten, in seinem Fall vermutlich sogar weniger als 100 Seiten?

Gruß
hansen


Nepal Rundreisen

CM-Marketing.de
Avatar CM-Marketing.de
Neuling (9 Beiträge)
am 19.12.2012, 19:34 Uhr schrieb CM-Marketing.de

Hallo Hannelore, hallo Jörg,

ich denke, die Frage warum man welchen Lösungsweg sucht ist gar nicht entscheidend. Welchen Umfang eine Seite hat, um dafür ausgerichtet eine Lösung zu entwickeln ist nicht zwingend der beste Ansatz. Dieser kann sich schließlich auch vergrößern. Daher bin ich schon bestrebt, den bestmöglichen Weg zu finden.

Meine Kernfrage bleibt doch einfach, wie ich mein bestehendes System so anpassen kann, dass es "gut" ist.

Ich gehe davon aus, dass in dem Teil erst einmal etwas so geändert werden muss, dass nur vorhandene URL aufgerufen und dazu passende DB-Einträge ausgegeben werden und, sofern hinter dem "/" nichts kommt, automatisch der Inhalt der Seite "startseite.html" geliefert wird.


function artikel($conid)
{
$aufgerufene_url = array_pop(explode("/", $_GET[\'url\']));
if(!isset($aufgerufene_url) || empty($aufgerufene_url) || strpos($aufgerufene_url, \'.html\') === FALSE)
{
// Artikel-Alias für die Startseite
$alias = "startseite";
}
else
{
$alias = array_shift(explode(".", $aufgerufene_url));
}
if($conid)
{
MySQL-SELECT...


Im else-Teil muss dann die header-Weiterleitung weg...? Wie muss ich diese abändern?


else
{

header(\'Location: \'. $_SERVER[\'SERVER_NAME\'] .\'/fehler.html\');


}


Wünschenswert wäre, wenn die includierte 404.php auch in dem Teil ausgegeben wird, wo sonst auch der Inhalt steht.

Vielen Dank schon einmal für Eure Bemühungen.


Internetagentur CM-Marketing.de aus Braunschweig
Online-Dienstleister
http://cm-marketing.de/



« zurück zu: OnPage Optimierung

Das Seitenreport Forum hat aktuell 5276 Themen und 36111 Beiträge.
Insgesamt sind 48364 Mitglieder registriert.