Fehlerdokumente im Apache
Eric
- webserver
0 Sönke Tesch0 Eric0 Sönke Tesch0 Eric
Guten Morgen...
Folgende Problemstellung:
ich möchte für meine Virtual Hosts jeweils eigene Fehlerdokumente erstellen...
Ich habe es folgendermaßen in <Virtual Host> eingetragen.
<VirtualHost 192.168.....>
ServerAdmin webmaster@net.de
DocumentRoot /www/net/
ServerName www.net.de
ErrorDocument 404 /www/net/error/error404.html
</VirtualHost>
Leider funtzt das so nicht, obwohl so in mehreren Apache-Büchern und auch auf http://httpd.apache.org/docs-2.0/de/mod/core.html#errordocument so steht...
Wisst ihr, was ich hier falsch gemacht habe?
Gruß Eric
DocumentRoot /www/net/
ErrorDocument 404 /www/net/error/error404.html
Leider funtzt das so nicht,
Nur nebenbei: Auch durch das superduperhippe Verb "funzen" bekommt die Aussage "funktioniert nicht" keinerlei hilfreichen Inhalt. Bitte bemühe Dich, bei zukünftigen Fragen eine Fehlerbeschreibung mitzuliefern. Du erleichterst das Antworten erheblich.
obwohl so in mehreren Apache-Büchern und auch auf http://httpd.apache.org/docs-2.0/de/mod/core.html#errordocument so steht...
Nein, da irrst Du. Es ist sicherlich nicht unbedingt offensichtlich, aber _so_ steht es dort bestimmt nicht beschrieben.
So ziemlich alle Dokumentangaben der Apache-Konfiguration beziehen sich auf das Dokumentenverzeichnis. Das gilt auch für den Pfad von ErrorDocument.
Gruß,
soenk.e
Hi Soenke,
Nur nebenbei: Auch durch das superduperhippe Verb "funzen" bekommt die Aussage "funktioniert nicht" keinerlei hilfreichen Inhalt. Bitte bemühe Dich, bei zukünftigen Fragen eine Fehlerbeschreibung mitzuliefern. Du erleichterst das Antworten erheblich.
Fehlerbeschreibung: Apache ignoriert den von mir angegebenen Pfad und nimmt als ErrorDocument die Standard-Dokumente.
Nein, da irrst Du. Es ist sicherlich nicht unbedingt offensichtlich, aber _so_ steht es dort bestimmt nicht beschrieben.
In einem Apache-Buch stehts folgendermaßen:
Syntax: ErrorDocument Fehlercode Dokument
Default: (Die internen Fehlerdokumente werden verwendet)
Kontext: Serverkonfiguration, <VirtualHost>, <Directory>,
<Location>, <Files>, .htaccess
ErrorDocument 500 /error/server_error.html
ErrorDocument 404 /cgi-bin/not_found
ErrorDocument 410 http://host.domain.tld/error/gone.html
ErrorDocument 403 "Der Zugriff ist nicht erlaubt."
--> So habe ich es doch bei mir auch gemacht.
So ziemlich alle Dokumentangaben der Apache-Konfiguration beziehen sich auf das Dokumentenverzeichnis. Das gilt auch für den Pfad von ErrorDocument.
Wie meinst du das? Heißt das, dass ich die Error-Datei eines Virtuellen Hosts auch in den DocumentRoot des Hosts legen muss?
Gruß und vielen Dank
Eric
Nein, da irrst Du. Es ist sicherlich nicht unbedingt offensichtlich, aber _so_ steht es dort bestimmt nicht beschrieben.
ErrorDocument 404 /cgi-bin/not_found
--> So habe ich es doch bei mir auch gemacht.
Nein, wirklich nicht. Schau nochmal ganz genau hin:
ErrorDocument 404 /www/net/error/error404.html
Es besteht ein signifikanter Unterschied zwischen der Zeile aus der Anleitung und Deiner Zeile. Überlege Dir, wo /cgi-bin normalerweise liegt. Überlege Dir dann, welche Auswirkungen diese Erkenntnis auf Deine Angabe hat.
Schaue auch in jedem Fall nochmal in die (richtige) Anleitung unter http://httpd.apache.org/docs/mod/core.html#errordocument. Insbesondere der Punkt drei der vier aufgelisteten und das dort hervorgehobene Wort dürften Dich brennend interessieren.
So ziemlich alle Dokumentangaben der Apache-Konfiguration beziehen sich auf das Dokumentenverzeichnis. Das gilt auch für den Pfad von ErrorDocument.
Wie meinst du das? Heißt das, dass ich die Error-Datei eines Virtuellen Hosts auch in den DocumentRoot des Hosts legen muss?
Ja, aber das ist nicht Dein Problem, denn Deine Fehlerdokumente liegen bereits innerhalb Deines DocumentRoot.
Gruß,
soenk.e
ErrorDocument 404 /cgi-bin/not_found
ErrorDocument 404 /www/net/error/error404.html
Es besteht ein signifikanter Unterschied zwischen der Zeile aus der Anleitung und Deiner Zeile.
Wenn ich es richtig verstehe, meinst du, dass sich die Error-Datei im Ordner "cgi-bin" befinden muss?
Überlege Dir, wo /cgi-bin normalerweise liegt. Überlege Dir dann, welche Auswirkungen diese Erkenntnis auf Deine Angabe hat.
Der Ordner "cgi-bin" befindet sich bei mir unter "/www/Apache~1/Apache2/cgi-bin".
Darin habe ich dann einen Ordner "not_found" angelegt, worin sich die Datei "error.html" befindet.
Sicherlich mache ich noch irgendeinen Fehler, den ich leider nicht bemerke.
Schaue auch in jedem Fall nochmal in die (richtige) Anleitung unter http://httpd.apache.org/docs/mod/core.html#errordocument.
Ich denke, in diesem Abschnitt steht dasselbe wie in meinen Apache-Büchern. Mit Sicherheit verstehe ich irgendwie den Inhalt falsch, da ich wieder zur selben Erkenntnis, wie vorhin, gekommen bin.
Ich glaube, langsam beginne ich dich zu nerven Sönke, oder?
Vielen Dank
Eric
hallo Eric,
Schaue auch in jedem Fall nochmal in die (richtige) Anleitung unter http://httpd.apache.org/docs/mod/core.html#errordocument.
Ich denke, in diesem Abschnitt steht dasselbe wie in meinen Apache-Büchern.
Möglich, das muß aber nicht zwingend so sein. Es gibt ein paar kleine Unterschiede zwischen Apache 1.3.x und 2.0.x. Für dich ist die Dokumentation zur 2.0.x die richtige Lektüre, und die findest du unter http://httpd.apache.org/docs-2.0/custom-error.html
Grüße aus Berlin
Christoph S.
Für dich ist die Dokumentation zur 2.0.x die richtige Lektüre, und die findest du unter http://httpd.apache.org/docs-2.0/custom-error.html
In dieser Lektüre habe ich einen Hinweis gefunden, und zwar, dass das ErrorDocument nur für .htaccess möglich ist, wenn AllowOverride dementsprechend gesetzt ist.
Und jetzt meine Frage, wie muss es denn gesetzt sein?
Noch eine Frage Christoph...
Muss ich meine ErrorDatei nun im Ordner "cgi-bin" ablegen oder ist dieser Pfad frei wählbar?
Gruß Eric
hallo Eric,
In dieser Lektüre habe ich einen Hinweis gefunden, und zwar, dass das ErrorDocument nur für .htaccess möglich ist, wenn AllowOverride dementsprechend gesetzt ist.
Und jetzt meine Frage, wie muss es denn gesetzt sein?
Das findest du in derselben Dokumentation unter http://httpd.apache.org/docs-2.0/de/mod/core.html#allowoverride.
Muss ich meine ErrorDatei nun im Ordner "cgi-bin" ablegen oder ist dieser Pfad frei wählbar?
Der Pfad ist frei wählbar. /cgi-bin halte ich persönlich sogar für ungeeignet, dort sollten imho nur "Scripts" liegen.
Grüße aus Berlin
Christoph S.
ErrorDocument 404 /cgi-bin/not_found
ErrorDocument 404 /www/net/error/error404.html
Es besteht ein signifikanter Unterschied zwischen der Zeile aus der Anleitung und Deiner Zeile.
Wenn ich es richtig verstehe, meinst du, dass sich die Error-Datei im Ordner "cgi-bin" befinden muss?
Ohje, nein. Du siehst den Wald offenbar vor lauter Bäumen nicht mehr :)
Schaue auch in jedem Fall nochmal in die (richtige) Anleitung unter http://httpd.apache.org/docs/mod/core.html#errordocument.
Ich denke, in diesem Abschnitt steht dasselbe wie in meinen Apache-Büchern.
Du hast den entscheidenden Satz gerade abgeschnitten:
Insbesondere der Punkt drei [..] und das dort hervorgehobene Wort dürften Dich brennend interessieren.
Der Punkt drei lautet:
3. redirect to a local _URL-path_ to handle the problem/error
Obacht, es ist von einer URL die Rede! Ein Pfad im Dateisystem ist aber keine vom Webserver zu verarbeitende URL. Womit wir dann zu dem entscheidenden Unterschied kommen, auf den ich Dich aufmerksam machen wollte:
ErrorDocument 404 /cgi-bin/not_found
ErrorDocument 404 /www/net/error/error404.html
In der Anleitung ist eine lokale URL angegeben, "/cgi-bin/not_found", Du hingegen benutzt einen absoluten Pfad in Deinem Dateisystem, "/www/net/error/error404.html".
Da der Webserver aber eine URL erwartet (und keinen Dateipfad), sucht er im Dokumentenverzeichnis (!) nach "/www/net/error/error404.html", was wiederum im Dateisystem "/www/net/www/net/error/error404.html" entspricht (DocumentRoot + ErrorDocument) - und diese Datei gibt es nicht.
Fazit:
ErrorDocument 404 /error/error404.html
Ich hoffe, Dir geht jetzt ein Licht auf :)
Ich glaube, langsam beginne ich dich zu nerven Sönke, oder?
Vielen Dank
Das Dankeschön entschädigt mehr als Du denkst, wirklich.
Gruß,
soenk.e