Server Fehlermeldung umstellen
HP-User
- webserver
0 Der Martin
1 Christian Kruse0 Der Martin
0 HP-User
0 Baba0 Der Martin
0 Baba
0 Malcolm Beck´s0 Baba
Abend Forum
Gibt es eine Möglichkeit, die Nachricht:
----------------------------------------------------
Not Found
The requested document was not found on this server.
----------------------------------------------------
auf dem eigenen Webspace so umzustellen, daß anstatt dieser Meldung eine Vordefinierte Webseite (html-Dokument) angezeigt wird?
Gruß HP-User
Hallo,
Gibt es eine Möglichkeit, die Nachricht:
Not Found
The requested document was not found on this server....
also den HTTP-Status/Fehler 404 ...
... auf dem eigenen Webspace so umzustellen, daß anstatt dieser Meldung eine Vordefinierte Webseite (html-Dokument) angezeigt wird?
Ja, wenn dein Webhoster eigene Fehlerdokumente zulässt. Die Direktive heißt dann treffenderweise auch ErrorDocument.
Ciao,
Martin
Moin Martin,
... auf dem eigenen Webspace so umzustellen, daß anstatt dieser Meldung eine Vordefinierte Webseite (html-Dokument) angezeigt wird?
Ja, wenn dein Webhoster eigene Fehlerdokumente zulässt. Die Direktive heißt dann treffenderweise auch ErrorDocument.
Aber Vorsicht, der häufigste Fehler, den ich dabei sehe ist das angeben einer URL statt eines Pfades. Das führt zu dem äusserst unschönen Verhalten, dass ein 302 statt des 404 ausgelöst wird mit Location auf dem ErrorDocument. Und das wieder wird dann üblicherweise mit 200 ausgeliefert…
Steht zwar im Handbuch, aber man weiss ja, wie die gelesen werden :)
LG,
CK
Hallo,
Die Direktive heißt dann treffenderweise auch ErrorDocument.
Aber Vorsicht, der häufigste Fehler, den ich dabei sehe ist das angeben einer URL statt eines Pfades.
oh ja, das hätte ich vielleicht auch noch erwähnen sollen.
Das führt zu dem äusserst unschönen Verhalten, dass ein 302 statt des 404 ausgelöst wird mit Location auf dem ErrorDocument. Und das wieder wird dann üblicherweise mit 200 ausgeliefert…
Genau. Und das ist Käse. Nicht nur wegen des falschen HTTP-Statuscodes, sondern auch aus dem banalen Grund, dass dann in der Adressleiste nicht mehr die URL steht, die den Fehler ausgelöst hat, sondern die (korrekte) URL des Fehlerdokuments. Es fehlt also, wenn man den Wortlaut der Fehlerseite mal ausklammert, nicht nur die Information, *dass* ein Fehler aufgetreten ist, sondern auch *wo*.
Steht zwar im Handbuch, aber man weiss ja, wie die gelesen werden :)
Ja. *seufz*
Ciao,
Martin
Hallo Martin, hallo Christian
Ja, hab ich gesehen. Es gibt einen Ordner ErrorDocs. Da liegen exakt 13 Dokumente drin. Soweit ich sehe die gängigen Fehlermeldungen. Der Witz ist, das man den Namen der Fehlerdatei nicht ändern kann. Man kann auch keine anderen Fehlerdateien zusätzlich in dieses Verzeichnis laden. Für eine eigene Fehlermeldung muss man wie folgt vorgehen:
1. Die Original-Fehlerhtml herunter laden.
2. Eine Kopie umbenennen (für später, falls man die Original-Meldung mal wieder braucht).
3. Das Original (ohne umzubenennen) nach herzenslust ändern, und wieder in sein Ursprungsverzeichnis hochladen.
Das wars. Jede andere Datei, die anders heißt als das original erzeugt einen kritischen Übertragungd-Fehler.
Wer es mal testen will:
Theoretisch müssen alle Links jetzt deaktiviert sein, d. h. daß ein 404er ausgegeben werden müsste - bei mir funktioniert es wunderbar.
Später, wenn die Links freigeschaltet werden, erzeugen sie auch kein 404er mehr. Ich habe diesen Weg gewählt, um nicht sämtliche Links aller Unterseiten für die PreLunchphase manuell abändern zu müssen.
Gruß und Gute Nacht
HP-User
auf dem eigenen Webspace so umzustellen, daß anstatt dieser Meldung eine Vordefinierte Webseite (html-Dokument) angezeigt wird?
Hallo,
neben der genannten gibt es auch die Möglichkeit das über .htaccess und mod-rewrite zu machen. Klappt bei zb bei Apache aber zb nicht auf IIS.
Ansatz:
----------- htaccess -------------
RewriteEngine on
RewriteBase /
RewriteRule (.*[^/])/$ /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php/$1 [QSA] #$_SERVER['PATH_INFO']
-----------------------------------
der dritte Block sagt:
Wenn es die Datei nicht gibt oder den Ordner nicht gibt dann leite auf die index.php weiter, wobei der ursprüngliche request hinten drangehängt wird ($1). In der index.php werte ich die Anfrage aus ($_SERVER['PATH_INFO']) und vergleiche mit einer DB. Wenn kein Eintrag in der DB gefunden wird, handelt index.php die Fehlermeldung ab. So kann ich bequem Fehlerseiten in meinem template erzeugen.
Habe auch eine Lösung für IIS (Windows Server) gefunden (in der entsprechenden mod-rewrite-Lösung). Kann ich bei Bedarf auch noch schreiben.
Cheers,
Baba
Hallo,
neben der genannten gibt es auch die Möglichkeit das über .htaccess und mod-rewrite zu machen.
ja, das ist auch möglich.
RewriteEngine on
RewriteBase /
link to index.php if file does not exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php/$1 [QSA] #$_SERVER['PATH_INFO']
>
> der dritte Block sagt:
> Wenn es die Datei nicht gibt oder den Ordner nicht gibt dann leite auf die index.php weiter, wobei der ursprüngliche request hinten drangehängt wird ($1). In der index.php werte ich die Anfrage aus ($\_SERVER['PATH\_INFO']) und vergleiche mit einer DB. Wenn kein Eintrag in der DB gefunden wird, handelt index.php die Fehlermeldung ab.
Und denk bitte auch dran, gleichzeitig mit der Meldung auch einen HTTP-Status 404 zu setzen.
Dann klappt's auch mit dem Nachbarn.[tm]
Ciao,
Martin
--
"Gestern habe ich die Rede des Parteivorsitzenden gehört. Zwei Stunden lang!" - "Worüber?" - "Hat er nicht gesagt."
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
Und denk bitte auch dran, gleichzeitig mit der Meldung auch einen HTTP-Status 404 zu setzen.
tue ich ja :)
Cheers,
Baba
مرحبا
link to index.php if file does not exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php/$1 [QSA] #$_SERVER['PATH_INFO']
der dritte Block sagt:
Wenn es die Datei nicht gibt oder den Ordner nicht gibt dann leite auf die index.php weiter
Das funktioniert aber nur mit Links, die ins "Leere" zielen. Wenn du aber einen Ordner mit bspw. "css" hast, und innerhalb dieses Ordners auf eine nicht-existierende Ressource zugreifst, bekommst du einen Server-404, kannst es also auf deine Weise nicht abfangen.
Dein Bsp. ist gut, um Content aus der DB zu identifizieren, nicht aber um Fehlerseiten abzufangen.
Ich mache es seit Jahren wie folgt (das speichern der Fehler lasse ich hier aussen vor, gehört aber dazu):
## .htaccess Fehlermeldungen abfangen
ErrorDocument 401 /index.php?error_document=401
ErrorDocument 403 /index.php?error_document=403
ErrorDocument 404 /index.php?error_document=404
#index.php
if (isset($_GET['error_document']))
{
switch($_GET['error_document'])
{
case '401':
$_SERVER_ERROR = 401;
break;
case '403':
$_SERVER_ERROR = 403;
break;
case '404':
$_SERVER_ERROR = 404;
break;
}
}
mfg
Wenn du aber einen Ordner mit bspw. "css" hast, und innerhalb dieses Ordners auf eine nicht-existierende Ressource zugreifst, bekommst du einen Server-404, kannst es also auf deine Weise nicht abfangen.
Ich verstehe nicht, was Du meinst. Wenn ich auf eine nicht vorhandene css-Datei zugreife, bekomme ich für diesen Request einen 404. Gesendet wird dann meine Fehlerseite (generiert von index.php), statt der css. Die ignoriert der Browser dann. Wenn die css existiert, wird sie gesendet. Sie muss auch nicht in die DB aufgenommen werden.
Der Vorteil an dieser Variante ist für mich einfach: auch bei meinen Errorseiten kann ich auf alle Variablen, Module, etc zugreifen, da ich meine Seite ja dynamisch generiere. Eine statische html Datei bietet mir zuwenig.
Ist vielleicht nicht wichtig, aber ich würde Deinen Punkt gerne verstehen.
Cheers,
Baba
Hallo,
Wenn du aber einen Ordner mit bspw. "css" hast, und innerhalb dieses Ordners auf eine nicht-existierende Ressource zugreifst, bekommst du einen Server-404, kannst es also auf deine Weise nicht abfangen.
Ich verstehe nicht, was Du meinst.
dann sind wir schon zwei. Ich habe auch schon gerätselt, was er uns sagen möchte.
Wenn ich auf *irgendeine* nicht existierende Ressource zugreife, bekomme ich einen 404er und das vordefinierte ErrorDocument anstatt der gewünschten Ressource.
Gesendet wird dann meine Fehlerseite (generiert von index.php), statt der css. Die ignoriert der Browser dann.
Richtig, weil er in dem Moment ein Stylesheet erwartet und nichts anderes. Dasselbe passiert, wenn der Browser ein Bild erwartet und stattdessen das ErrorDocument bekommt.
Wenn die css existiert, wird sie gesendet. Sie muss auch nicht in die DB aufgenommen werden.
Welche DB? Soweit ich das sehe, war hier keine im Spiel.
Ist vielleicht nicht wichtig, aber ich würde Deinen Punkt gerne verstehen.
+1
Ciao,
Martin
مرحبا
Ich verstehe nicht, was Du meinst.
dann sind wir schon zwei.
Ich hatte es etwas falsch in Erinnerung, daher musste ich das nochmal nachkonstruieren.
Nehmen wir folgende Simple Struktur (alle Verzeichnisse sind im DocumentRoot):
/
/css/
/js/
/sonstiges/
Wenn man jetzt irgendeine URL aufruft, durchsucht der Server ersteinmal alle Existierenden Files und Verzeichnisse auf mögliche treffer. Wenn nichts gefunden wird, wird alles auf die index.php geleitet, sofern wir Babas RewriteRule nehmen.
Damit kriegt man aber nicht alle Fehler (401, 403 ... garnicht), nicht einmal alle 404er. Zum testen einfach mal eines der existierenden Verzeichnisse im Browser aufrufen (vorausgesetzt, in den Verzeichnissen ist keine index.php, kein FancyIndexing oder ähnliches).
Spätestens hier bekommt man einen Serverinternen 404er, daher mein Vorschlag mit ErrorDocument.
mfg
Hi,
Zum testen einfach mal eines der existierenden Verzeichnisse im Browser aufrufen (vorausgesetzt, in den Verzeichnissen ist keine index.php, kein FancyIndexing oder ähnliches).
Spätestens hier bekommt man einen Serverinternen 404er
nein, bei einem versuchten Zugriff auf ein Verzeichnis ohne index-Datei (oder was immer als Default-Dokument definiert ist), und bei unterdrückter Verzeichnis-Auflistung gibt's einen 403er (Forbidden).
Ciao,
Martin
مرحبا
nein, bei einem versuchten Zugriff auf ein Verzeichnis ohne index-Datei (oder was immer als Default-Dokument definiert ist), und bei unterdrückter Verzeichnis-Auflistung gibt's einen 403er (Forbidden).
Bei Strato z. B. nicht, da bekomme ich bei Zugriff auf ein Existierendes Verzeichnis ohne index.php eine Serverinterne 404er Meldung, obwohl alles auf die index.php geleitet wird, fast wie Babas Bsp..
Bei 1&1 bekomme ich einen 403er bei gleicher Konstallation. Deswegen mein Tipp, auf beides zu reagieren.
Bei einem weiteren Privaten Anbieter bekomme ich übrigens auch einen 403er (was an sich auch richtig sein mag, aber dann kommt Strato und sagt: Nein!).
mfg