OnkelOtto: Eigene Fehlerseite nur für ein bestimmtes Verzeichnis

Hallo

Mann kann ja für seine eigene webseite mittels der .htaccess-Datei einrichten, dass eine eigene 404-Fehlerseite angezeigt wird, wenn eine nicht vorhandene datei aufgerufen wird.

Ich würde nun gerne wissen, ob es auch möglich ist, für ein ganz bestimmtes Verzeichnis, eine andere 404-Fehlerseite anzeigen zu lassen.

Beispiel:

http://www.example.org/verzeichnis-10/blabla.html
Hier soll die folgebde Fehlerseite angezeigt werden:
http://www.example.org/fehler404.html

http://www.example.org/bilder/trallalla.html
Hier soll die folgebde Fehlerseite angezeigt werden:
http://www.example.org/fehler404-2.html

Ist so etwas irgendwie machbar?

Gruß
Otto

  1. Hallo,

    Ich würde nun gerne wissen, ob es auch möglich ist, für ein ganz bestimmtes Verzeichnis, eine andere 404-Fehlerseite anzeigen zu lassen.

    Ist so etwas irgendwie machbar?

    Ja, indem du in dem besonderen Verzeichnis nochmal eine .htaccess Datei anlegst, die auf die abweichende Fehlerseite verweist. Damit wird dann die Stadardfehlerseite, die du über die .htaccess im Hauptverzeichnis festlegst, "überschrieben".

    Gruß
    Alex

  2. Hi,

    Ich würde nun gerne wissen, ob es auch möglich ist, für ein ganz bestimmtes Verzeichnis, eine andere 404-Fehlerseite anzeigen zu lassen.

    natürlich, denn die Konfigurationsdatei .htaccess gilt immer für das Verzeichnis, in dem sie sich befindet, und die unterhalb davon liegenden.

    http://www.example.org/verzeichnis-10/blabla.html
    http://www.example.org/bilder/trallalla.html

    Diese zwei Verzeichnisse liegen in der Hierarchie sogar "nebeneinander", beeinflussen sich also nicht einmla gegenseitig.

    http://www.example.org/fehler404.html
    http://www.example.org/fehler404-2.html

    Aber du möchtest die Fehlerseiten in der .htaccess hoffentlich nicht als HTTP-Ressourcen angeben? Dann wird der Browser nämlich im Fehlerfall nur mit einem Redirect angewiesen, die Fehlerseite selbst abzurufen, und bekommt sie dann mit Status 200. Vom ursprünglichen Fehler merkt er nichts.

    So long,
     Martin

    --
    Chef zum Bewerber: Es gibt zwei Dinge, auf die ich allergrößten Wert lege. Das eine ist Sauberkeit! Haben Sie übrigens die Schuhe auf der Matte abgetreten? - Ja, selbstverständlich. - Gut. Das andere ist uneingeschränkte Ehrlichkeit. Übrigens, draußen liegt gar keine Fußmatte.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hi Martin

      Aber du möchtest die Fehlerseiten in der .htaccess hoffentlich nicht als HTTP-Ressourcen angeben? Dann wird der Browser nämlich im Fehlerfall nur mit einem Redirect angewiesen, die Fehlerseite selbst abzurufen, und bekommt sie dann mit Status 200. Vom ursprünglichen Fehler merkt er nichts.

      Meine 404-Fehlerseite ist eine PHP-Datei.
      Und bei der habe ich ganz oben das drin:
      <?php header("HTTP/1.1 404"); ?>
      Somit müsste die 404_Fehlerseite doch den Statuscode 404 zurückliefern, oder?

      natürlich, denn die Konfigurationsdatei .htaccess gilt immer für das Verzeichnis, in dem sie sich befindet, und die unterhalb davon liegenden.

      Ah OK alles klar.
      Ist es denn auch möglich, diese zweite 404-Fehlerseite nur für einen bestimmten Dateityp gilt.
      Also so, dass in dem Verzeichis "bilder" nur nicht vorhandene .jpg-Dateien zu der zweiten Fehlerseite führen?

      Beispiele:

      http://www.example.org/verzeichnis-10/blabla.html
      Hier soll die folgebde Fehlerseite angezeigt werden:
      http://www.example.org/fehler404.php

      http://www.example.org/bilder/trallalla.html
      Hier soll die folgebde Fehlerseite angezeigt werden:
      http://www.example.org/fehler404.php

      http://www.example.org/maus.jpg
      Hier soll die folgebde Fehlerseite angezeigt werden:
      http://www.example.org/fehler404.php

      http://www.example.org/bilder/hund.gif
      Hier soll die folgebde Fehlerseite angezeigt werden:
      http://www.example.org/fehler404.php

      http://www.example.org/bilder/katze.jpg
      Hier soll die folgebde Fehlerseite angezeigt werden:
      http://www.example.org/fehler404-2.php

      Es soll also für alle Verzeichnisse und Unterverzeichnisse meiner kompletten Webste die "normale" 404-Fehlerseite angezeigt werden.
      Außer, wenn jemand eine nicht vorhandene .jpg-Datei im Unterverzeichnis "bilder" aufruft.
      Dann soll die zweite 404-Fehlerseite angezeigt werden.

      Gruß
      Otto

      1. Hallo,

        Aber du möchtest die Fehlerseiten in der .htaccess hoffentlich nicht als HTTP-Ressourcen angeben? Dann wird der Browser nämlich im Fehlerfall nur mit einem Redirect angewiesen, die Fehlerseite selbst abzurufen, und bekommt sie dann mit Status 200. Vom ursprünglichen Fehler merkt er nichts.
        Meine 404-Fehlerseite ist eine PHP-Datei.
        Und bei der habe ich ganz oben das drin:
        <?php header("HTTP/1.1 404"); ?>
        Somit müsste die 404_Fehlerseite doch den Statuscode 404 zurückliefern, oder?

        ja, das stimmt schon - aber der Status 404 kommt nicht mehr im Kontext der ursprünglich angefragten URL, sondern im Kontext der Fehlerseite, wo er sinnfrei ist. Beispiel:

        * Besucher ruft /somepage.html auf, die existiert
           -> wird also mit Status 200 ausgeliefert.
         * Besucher ruft /dummypage.html auf, die existiert nicht.
           -> Browser bekommt Status 301 (Redirect) mit dem Hinweis "Hol dir das Dokument unter /fehler404.html ab".
           Browser ruft /fehler404.html ab
           -> Browser bekommt die angefragte Seite mit Status 404.

        Dummerweise steht jetzt in der Browser-Adresszeile die Adresse des zuletzt angefragten Dokuments, also /fehler404.html, und das ist natürlich Murks. Da sollte ja die Request-URL stehen, die den Fehler ausgelöst hat. Hier also /dummypage.html.

        Um diesen zusätzlichen browserseitigen Request zu vermeiden, darf man die Adresse des ErrorDocument eben nicht als HTTP-Ressource angeben, sondern als Datei relativ zum DocumentRoot. In deinem Fall also:

        ErrorDocument 404 /fehler404.html

        Ist es denn auch möglich, diese zweite 404-Fehlerseite nur für einen bestimmten Dateityp gilt.
        Also so, dass in dem Verzeichis "bilder" nur nicht vorhandene .jpg-Dateien zu der zweiten Fehlerseite führen?

        AFAIK nicht. Aber wenn dein Error-Dokument sowieso ein PHP-Script ist, kannst du ja darin die ursprüngliche Request-URL abfragen und davon abhängig unterschiedlich reagieren. Das wäre die einfachste Lösung, die mir dazu einfällt.

        So long,
         Martin

        --
        Der Professor sitzt beim Essen in der Mensa. Ein Student setzt sich ihm unaufgefordert gegenüber.
        Professor: Seit wann essen denn Schwein und Adler an demselben Tisch?
        Student:   Na gut, dann flieg' ich eben zum nächsten Tisch.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hallo

          ErrorDocument 404 /fehler404.html

          Ja, genau so habe ich das auch bei mir in der .htacess-Datei stehen.
          Ich hatte mich da blöd ausgedrückt.

          AFAIK nicht. Aber wenn dein Error-Dokument sowieso ein PHP-Script ist, kannst du ja darin die ursprüngliche Request-URL abfragen und davon abhängig unterschiedlich reagieren. Das wäre die einfachste Lösung, die mir dazu einfällt.

          Ist es nicht möglich, in der .htaccess-Datei dafür zu sorgen, dass "ErrorDocument 404 /fehler404.html" nur bei .jpg-Dateien ausgeführt wird?

          Sinngemäß quasi so etwas hier:
          <FilesMatch ".(jpg)$">
          ErrorDocument 404 /fehler404.html
          </FilesMatch>

          Gruß
          Otto

          1. Hi,

            ErrorDocument 404 /fehler404.html
            Ja, genau so habe ich das auch bei mir in der .htacess-Datei stehen.

            aha, dann hast du durch dein Beispiel ein mögliches Problem gezeigt, das du gar nicht hast.

            Ist es nicht möglich, in der .htaccess-Datei dafür zu sorgen, dass "ErrorDocument 404 /fehler404.html" nur bei .jpg-Dateien ausgeführt wird?

            Sinngemäß quasi so etwas hier:
            <FilesMatch ".(jpg)$">
            ErrorDocument 404 /fehler404.html
            </FilesMatch>

            Warum liest du nicht selbst nach? Tatsächlich ist für die ErrorDocument-Direktive der Kontext "directory" mit angegeben, was gemäß der Erläuterung bedeutet, dass diese Direktive auch in einem der Container <Directory>, <Location> oder <Files> vorkommen darf. Das hätte ich nicht erwartet, ehrlich gesagt.
            <FilesMatch> wird zwar nicht aufgeführt; ich vermute aber, dass das auch zu dieser Aufzählung gehören sollte. Und selbst wenn nicht - Dateien mit einer bestimmten Extension oder einer Gruppe bestimmter Extensions kann man ja auch mit <Files> definieren.

            So long,
             Martin

            --
            Wenn ein Räuber eine deutsche Amtsstube überfällt, welchen Satz kann er sich dann sparen?
            "Keine Bewegung!"
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(