PDA

Vollständige Version anzeigen : .htaccess ErrorDocuments


frenetic
03-01-2004, 17:02
Is ganz simpel, meine Frage, und ich stell sie hier nur, da ich via Google keine Antwort drauf fand. ;)

Wie kann ich in einem .htaccess File auf eine übergeordnete Ebene verweisen. Konkret hab ich ein .htacces File in einem Unterordner, die ErrorDocuments aber eine Ebene höher platziert und nun will ich (natürlich relativ und nicht absolut) darauf verweisen.

ErrorDocument 404 ../error404.htm
ErrorDocument 404 /../error404.htm

Diese beiden Varianten gehen leider ned. :(


~f

surfer7
03-01-2004, 17:55
Hm wenn ich mich nicht täusch... Ich denke man muss die Pfade absolut angeben.

frenetic
03-01-2004, 18:05
Original geschrieben von surfer7

Hm wenn ich mich nicht täusch... Ich denke man muss die Pfade absolut angeben.Hm, ja danke erstmal surfer, aber ich wunder mich doch, ob's ned auch anders möglich is.

ErrorDocument 404 /error404.htm
verweist ja schlesslich auch relativ auf die Datei und so gibt's keinerlei Probs. :confused:


~f

surfer7
03-01-2004, 18:37
hm ja klar aber da ist ja die datei auf der selben ebene, äh ich mein im selben Verzeichnis.

frenetic
03-01-2004, 22:12
Is doch aber unlogisch, dass man relativ auf einen Unter- oder denselben Ordner verweisen kann aber nicht auf einen Ordner höher.

Das will mir einfach ned in den Kopf. Und mit expliziten URL's arbeit ich so ungern. ;)


~f

klaus52
04-01-2004, 01:01
Und bei 401er Fehlern, falls du da auch eigene Seiten willst, sind auch nur relative Pfade erlaubt...
ich wollt vorhin mal auf meinem lokalen apache etwas rumprobieren, aber bei mir hab ich nur meine eigene Fehlermeldung bekommen, wenn ichs absolut eingegeben hab, selbst wenn das ganze im gleiche Ordner war...

sprich: mit
"ErrorDocument 404 http://localhost/irgendwas/error404.htm"
gings, mit
"ErrorDocument 404 /error404.htm"
aber nicht... und ja, .htaccess und die error4.htm waren im selben Ordner, und ja, ich hab versucht eine datei in diesem ordner zu öffnen, die es gar nicht gibt :D
Nur mit Opera hat er mir unter den Standart 404er Fehler noch den Satz geschrieben "Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request."

P.S.: Achja, ich weiß ja nciht, mit welchem Browser tu da s getestet hast, aber als ich vorhin ein bisschen rumgeguggt hab ist mir aufgefallen, dass mehrere das problem hatten, dass sie nur dachten es würde nicht funktioneren, weil sie den IE verwendet haben - in anderen Browsern lief es aber ;) Irgendwo ham sie dazu geschrieben, dass die errorpage ne bestimmte dateigröße nciht unterschreiten darf, da er sie sonst nicht aktzeptiert...
Verstehen tu ichs trotzdem nicht, was ich falsch gemacht hab... nach diversen Beschreibungen im inet sollte das funzen... leider hab ich in keiner davon ein Wort gefunden ob das auch für höhere Ebenen gilt... (oder kanns daran liegen, dass meine apache unter windows läuft?)
Vielleicht schaff ichs in den nächsten Tagen das ganze online aufm webspace zu testen und ein bisschen rumzuprobieren... ich glaub jedenfalls, dass ich mir da auch eigene Fehlerseiten erstellen kann, muss nochmal nachguggen... aber zeitlich kann ich nciht sagen, wann ichs hinbekomm... ;)

P.P.S.: Hmm,da ich weiß, das ich in den nächsten Tagen nicht dazu gekommen wäre musste ich es doch gleich ausprobieren :D Und, also meinen Fehler hab ich zumindest gefunden (nachdem ic die error und access logs vom apache mal unte rdie lupe genommen hab...) ich bin irtümlich davon ausgegangen, dass sich die relative Pfadangabe auf den ordner bezieht in dem die htaaccess datei drin ist, sie bezieht sich aber auf den html - root ordner!

Konkret bei mir: Ich hat die error404.htm + .htaccess (also beide!) im Ordner d:\programme\wamp\homepages\errorpages\error
Und hab daher in die hatacces geschireben:
"ErrorDocument 404 /error404.htm"
Das ist aber falsch! Richtig muss es lauten:
"ErrorDocument 404 /errorpages/error/error404.htm"

(Da mein html root Verzeichnis der Ordner "homepages" ist). Und wenn ich deinen Text richtig verstanden hab, hast du den relativen Pfad auch auf den Ordner mit der .htaacces bezogen, oder?

Andernfalls stellt sich das Problem ja gar nicht... des heißt doch, wenn ich auf ne Datei unterhalb des root ordner zugreifen will *ausprobier* so ahb die error4.htm in den Ordner "Wamp" gesetzt und den relativen Pfad "/../error404.htm" probiert... klappt nicht... opera liefer noch die info, dass es dadurch nen 400 - Bad Request error gab... glaub auch nicht, dass man dagegen irgendwie was tun kann...
Naja, wer weiß, ich hoffe, dass ich dir helfen konnte und du das gleiche prob wie ich oben hattest ... falls du allerdings das machen wolltest, was ich grad unten noch ausprobiert hab wünsch ich dir weiterhin viel Erfolg beim Suchen einer Lösung! ;)

CU
 Klaus

EEBKiller
04-01-2004, 03:23
Original geschrieben von frenetic
ErrorDocument 404 /error404.htm
verweist ja schlesslich auch relativ auf die Datei und so gibt's keinerlei Probs. :confused:

Sieht nach relativen Pfad aus, ist es aber nicht.

Eine Pfadangabe mit NUR nem (Slash) / vornedran ist bezogen auf "DOCUMENT_ROOT". (Also absolut)
Eine Pfadangabe mit ./ ist bezogen auf "THIS_DIR"
Eine Pfadangabe ohne besondere Kennzeichnung ist ebenfalls bezogen auf "THIS_DIR"
Und eine Pafdangabe mit ../ is bezogen auf "PARENT_DIR" (ausser, du bist schon im document root)


Wenn du jemanden ne Datei ausserhalb des Document_roots schicken willst, musst du ihm per PHP nen Header schicken, dass jetzt "text/html" kommt und mit nem speziellen Befehl die datei ausserhalb des Webspaces schicken ;)

klaus52
04-01-2004, 12:00
Original geschrieben von EEBKiller
Sieht nach relativen Pfad aus, ist es aber nicht.

Eine Pfadangabe mit NUR nem (Slash) / vornedran ist bezogen auf "DOCUMENT_ROOT". (Also absolut)

:yes:

Original geschrieben von EEBKiller
Eine Pfadangabe mit ./ ist bezogen auf "THIS_DIR"
:noe: Hierbei funzt nur "/" (Document_Root) oder ein absoluter Pfad mit http:. Wenn man mit nem "." beginnt gibt er einem das was man geschrieben hat als plain text als Fehlermeldung aus!
(Also z.B. "./error404.htm")

Original geschrieben von EEBKiller
Eine Pfadangabe ohne besondere Kennzeichnung ist ebenfalls bezogen auf "THIS_DIR"
Auch hier Fehlermeldung als plain Text ("error404.htm")

Original geschrieben von EEBKiller
Und eine Pafdangabe mit ../ is bezogen auf "PARENT_DIR" (ausser, du bist schon im document root)
Des hab ich jetzt nicht ausprobiert, sollte allerdings auch nicht funzen, s.o. ;)

CU
 Klaus

EEBKiller
04-01-2004, 13:47
Ich bin jetzt mal von den Allgemeinen internen verlinkungen einer Page ausgegangen, ned nur Error Documents. Aber wenn die kein . .. oder eben garnix packen, dann muss man es halt absolut ( / ) angeben ;)

surfer7
04-01-2004, 16:20
Mhmmm wird wohl so sein. Versuchs mal so.

Ich selbst hab die 404er heben global auf meinem server eingestellt. also nix mit htaccess

@fre sag mir bitte bescheid wenn's geht.

s nimmt mi wunder :D

frenetic
04-01-2004, 19:51
Danke erstmal für die kleine Lektion, klaus und EEB, obwohl ich alles, was klaus gepostet hat, auch schon voeher wusste. Neu is für mich, dass ein '/' vor einer Verlinkung als absolut gilt. :twink:

Original geschrieben von EEBKiller

Ich bin jetzt mal von den Allgemeinen internen verlinkungen einer Page ausgegangen, ned nur Error Documents. Aber wenn die kein . .. oder eben garnix packen, dann [...]Hehe, funzt bei mir eben beides nicht, leider. Und am Browser hängt's ned (sowohl in Opera als auch im IE wirft er mir zusätzlich zum 404 resp. 401 oder 403 noch 'nen 500er Internal Server Error an den Kopf -- also sind './' resp. '../' am Anfang einer Verlinkung ned erlaubt). ;)

Tja, surfer, leider will ich die ErrorDocs nur für einen Unterordner und dessen Unterordner einrichten, weil ich die domainglobalen andersweitig verlinkt hab. Zum Glück allerdings haben die .htaccess Angaben einen höheren Stellenwert als die domainglobale Einstellung (eigentlich erstaunlich aber für meine Zwecke extrem praktisch). :)
Werd dich unterrichten, wenn ich's endlich geschafft habe, innerhalb der .htaccess auf ein höheres DIR zu verlinken ... weiss allerdings wirklich ned, was ich noch probieren soll.


~f

EEBKiller
04-01-2004, 21:02
du bist in /dein_ordner/

Die 404.html ist in / (Also Document root)

Dann mach doch einfach

ErrorDocument 404 /404.html


damit verlinkst du in dem falle auf den Übergeordneten Ordner. Da kannst du leider keine "Allzweck-htaccess" machen, die bei jedem Ordner den selben Kram macht. Aber so schwer ist es ja nicht, für hjeden Ordner ne eigene htaccess zu basteln.

Solang der Apache rennt, sollte das dich ned weiter kümmern :D

frenetic
04-01-2004, 21:32
Original geschrieben von EEBKiller
du bist in /dein_ordner/

Die 404.html ist in / (Also Document root)

Dann mach doch einfach

ErrorDocument 404 /404.html

damit verlinkst du in dem falle auf den Übergeordneten Ordner.Leider nein. ;)

Damit verlink ich auf denselben Ordner. Glaub mir, hab's ausprobiert. Ich glaub auch ned, dass '/' für root steht, sondern für den aktuellen Ordner. Bestätigt seh ich mich dadurch, dass der mir bei einer Errorpage im selben Unterordner diese ohne Probs anzeigt, aber sobald ich das File nur im root Verzeichnis hab, sucht der Browser ... und sucht ... und sucht vermutlich immernoch (ja, sowohl Opera als auch der IE und ja, ich hab's ein paar mal versucht). :D


~f

EEBKiller
04-01-2004, 21:40
komisch auf meinem webspace steht der / immer für den Document_root.

Is wohl davon abhängig, wie der Apache konfiguriert is :ka:

frenetic
04-01-2004, 21:44
Wahrscheinlich. :(
Ne Ahnung, wie und wo kann ich denn diese Einstellung ändern? surfer? :shy:


~f

klaus52
04-01-2004, 22:37
Hmm, des war des worauf ich hinweisen wollte, dass es eben nicht auf den Ordner mit der .htaccess bezogen wird sondern aufs Document Root (wobei mir dieser Begriff fehlte :D )... seltsam das es bei dir anders ist... ich hab mich grad nochmal durchs apache manual geschlagen, und demnach sollte es eigtl immerauf die höchste html-Ebene bezogen sein, jedenfalls wenn ichs richtig verstanden habe, wobei ich mich nicht ganz sicher bin... :confused:

von http://httpd.apache.org/docs-2.0/en/mod/core.html#errordocument
1.) output a simple hardcoded error message
2.) output a customized message
3.) redirect to a local URL-path to handle the problem/error
4.) redirect to an external URL to handle the problem/error

Und die Definition von "url-path" ist: von http://httpd.apache.org/docs-2.0/en/mod/directive-dict.html#Syntax
The part of a url which follows the scheme and hostname as in /path/to/file.html. The url-path represents a web-view of a resource, as opposed to a file-system view.

surfer7
05-01-2004, 00:40
Original geschrieben von frenetic
Wahrscheinlich. :(
Ne Ahnung, wie und wo kann ich denn diese Einstellung ändern? surfer? :shy:


~f

hm erzähl mal was über die server config. Linux? NetBSD?
hast du irgendein admin tool?

frenetic
05-01-2004, 19:13
Ähm ... whoops. :lol:

Sorry Leute, der Fehler lag nich am Server, sondern an mir. :D

Ich hab nämlich ned einfach 'n ErrorDoc als .html File erstellt, sondern eine info.php eingerichtet, die sich um die Fehleranzeige kümmern soll. Die liegt im ROOT. Jetzt hab ich für die ErrorDocs auf meine functions.php mit der $_GET Variable errorid (also functions.php?errorid=404 usw.) verlinkt. Ebenfalls im ROOT. Die Functions sollte bei gesetzter $_GET['errorid'] dann eine Session mit dem Error festlegen und per header("Location: info.php") auf die info.php weiterleiten.
Leider war mir dabei nicht klar, dass das bei einem HTTP-Fehler aus 'nem Unterverzeichnis auch auf die info.php im Unterverzeichnis (wo sie ja gar ned existiert) weitergeleitet wird. Also hab ich den Befehl inner functions.php auf header("Location: /info.php") geändert und seitdem funktioniert alles einwandfrei und ich werd bei allen Errors aus sämtlichen Unterverzeichnissen auf die info.php weitergeleitet, wo mir dank erneuter SessionAbfrage die jeweils korrekte ErrorMessage angezeigt wird.

In conclusion: Ich hab mich schrecklich geirrt. Ein '/' ist für den Apache-Server sehr wahrscheinlich immer der Verweis auf's DOCUMENT_ROOT und damit eine absolute Verlinkung.

PS: Warum hab ich bei meinen PHP-Scripts nicht einfach für jede error page ein eigenes File erstellt? Zu chaotisch. Warum hab ich nicht einfach direkt per info.php?errorid=404 auf die Datei und die dazugehörigen ErrorDisplays verwiesen? Ihhh, dann sieht man ja die $_GET Variable in der Adresszeile des Browsers und könnt ihr auch nicht-zugelassene Einträge mitgeben, nur um meine Skripte zu testen. Mit sessions ist's da viel gemütlicher. Die übergeben nur Variablen, wenn sie's auch sollen und nicht, wenn der User selbst eine setzen will.

Trotzdem nochmal vielen Dank euch dreien, EEB, klaus und surfer. :freu:

~f :smup:

EEBKiller
05-01-2004, 19:45
Du denkst viel zu kompliziert :rofl:

Ich hab ja seit neuestem ein selbstgebautes CMS (OK, es ist eigentlich nur ein rekursives "Hol den wert aus {xxxx}, suche nach dem Template xxxx, ersetze {xxxx} mit template xxxx script" aber trotzdem seeeeeeehr mächtig :D)

Aber um wieder zu den Errors zu kommen:

ErrorDocument 401 /content.php?content=403
ErrorDocument 403 /content.php?content=403
ErrorDocument 404 /content.php?content=404

content.php is das CMS-Frontend, es holt sich per get den Code, schaut in der DB nach den jeweiligen Templates und spuckt es als Fehlerseite aus. Nix redirected. Simple and Fast :p, und das Beste: Content.php braucht nur $content alles andere wird übergangen bzw. überschrieben. Sessions find ich dafür viel zu "umständlich" :lol:

frenetic
05-01-2004, 19:53
Kommt ganz auf die DB drauf an. Erst zur DB connecten, nur um den Inhalt einer Page anzuzeigen wiederspricht mir. Dann hat man am Schluss nur noch TemplateFiles am Server und der ganze Inhalt der Page is inner DB stored. ;)

Ich arbeit auch mit Templates (und natürlich verschiedenen Designs), aber komplett anders. Von der Geschwindigkeit her reicht mir mein eigens kreiertes System völlig aus. Solang die Bilder und der Content direkt in den jeweiligen Pages immernoch den meisten Traffic verursachen, is alles im grünen Bereich. :D


~f

EEBKiller
05-01-2004, 19:55
Original geschrieben von frenetic
Kommt ganz auf die DB drauf an. Erst zur DB connecten, nur um den Inhalt einer Page anzuzeigen wiederspricht mir. Dann hat man am Schluss nur noch TemplateFiles am Server und der ganze Inhalt der Page is inner DB stored. ;)

Ich hab überhaupt keine Template-Files mehr am Server, steckt alles in der DB. Meine Seite is zu 95% DB-gestützt. Is auf jeden fall schneller als fopen, fget und so

Das einzige, was ich noch an "Hardware" von meiner Seite hab, sind die PHPs (der Parser, und das Admin CP), die CSS-Files, die Javascripte und natürlich die Pics und Downloads ;)

frenetic
05-01-2004, 20:05
Original geschrieben von EEBKiller

Ich hab überhaupt keine Template-Files mehr am Server, steckt alles in der DB. Meine Seite is zu 95% DB-gestützt. Is auf jeden fall schneller als fopen, fget und soDas auf jeden Fall, ich brauch ja auch nie Flatfiles, in die PHP was reinschreiben soll.
Die Templates werden alle included und den Content schreib ich auf ganz herkömmliche Weise selber rein und lad die bearbeiteten Files danach hoch.
Is praktisch, so ein komplett DB-gestütztes Content Management System, ohne Zweifel :yes:, aber bis ich mich mit PHP und SQL besser auskenn (bin halt noch 'n N00b :shy: ), bleib ich mal noch beim guten alten includen und requere_oncen der TemplateFiles und mach mir die Mühe, zu ändernde Files schnell per FTP runter- und wieder hochzuladen. ;)

PS: searchBuildTemplate( :thx: )


~f