Alex.1974: Error500 statt Error404

Hallo,

ich habe meine .htaccess so konfiguriert, dass auch Dateien mit
der Endung "htm" und "html" geparsed werden.

Wenn eine zu parsende Datei nun nicht gefunden wird, liefert mir
Apache statt eines 404 einen 500. Ich vermute, dass der Server
eine nicht vorhandene Datei an den Parser schicken will und der
dann einen Fehler verursacht.

Kann man das irgendwie abstellen? Der Fehler tritt auch nur bei
den Dateitypen auf, die geparsed werden sollen. Bei allen anderen
Dateitypen kommt brav ein 404.

Vielen Dank.
  Alex.1974

  1. Hallo,

    Wenn eine zu parsende Datei nun nicht gefunden wird, liefert mir
    Apache statt eines 404 einen 500. Ich vermute, dass der Server
    eine nicht vorhandene Datei an den Parser schicken will und der
    dann einen Fehler verursacht.
    Kann man das irgendwie abstellen? Der Fehler tritt auch nur bei
    den Dateitypen auf, die geparsed werden sollen. Bei allen anderen
    Dateitypen kommt brav ein 404.

    Ich kann zwar Deine Frage nicht beantworten, aber warum willst Du die eine Fehlermeldung durch eine andere ersetzen? *fragendguck*
    Für den Betrachter bleibt das Resultat letzlich gleich. Er kann die Seite nicht sehen. Er wird sich sicherlich nicht beruhigt zurücklegen und sagen "Puh ... nur ein Error 404 und kein 500. Hab ich ja nochmal Glück gehabt"

    Was soll das also ?

    Gruss
      MichaelB

  2. ich habe meine .htaccess so konfiguriert, dass auch Dateien mit
    der Endung "htm" und "html" geparsed werden.

    Das ist ein klein wenig unklug, da Du damit möglicherweise Serverresourcen sinnlos verbrätst.

    Ich würde Dir raten, auf solche Brutalomethoden zu verzichten und stattdessen die Dateiendungen in Verweisen ganz wegzulassen. Also zum Beispiel "meinserver.de/index" statt "meinserver.de/index.html".

    Dazu mußt Du leglich in Deiner obersten .htaccess

    options +multiviews

    einsetzen. Die Dateien behalten weiterhin ihre Dateiendungen (index.html, index.php, was auch immer), jedoch statt nach der Datei "index" aus dem Beispiel oben zu suchen, sammelt der Server beim Aufruf so einer Adresse alle Dateien ein, die vor dem Punkt "index" heißen und wählt die passende aus.

    Der Vorteil dieser Methode ist, daß Du Dich in Zukunft nicht mehr um die Dateiendungen in Verweisen kümmern mußt - egal, ob wenn Du eine HTML-Datei index.html durch eine SSI-Datei index.shtml oder eine PHP-Datei index.php ersetzt oder noch später eine PHP-Datei durch eine Perl-Datei index.pl ersetzt. Alle Verweise auf diese Datei lauten "index", die jeweils richtige holt der Server automatisch. Der Nutzen bzw. die Arbeitsersparnis ist nicht zu unterschätzen!

    Ich kann Dir diese Sache aus eigener Erfahrung (HTML -> SSI -> PHP) jedenfalls nur wärmstens empfehlen. Mehr Infos (falls überhaupt nötig) findest Du in der Apache-Anleitung unter http://httpd.apache.org/docs/mod/mod_negotiation (man beachte das fehlende .html am Ende:).

    Wenn eine zu parsende Datei nun nicht gefunden wird, liefert mir
    Apache statt eines 404 einen 500. Ich vermute, dass der Server
    eine nicht vorhandene Datei an den Parser schicken will und der
    dann einen Fehler verursacht.

    Eher unwahrscheinlich. Wenn der Server eine Datei nicht findet, findet er sie nicht, fertig. Ich würde ja vermuten, daß er Probleme hat, den 404 zu schicken. Dagegen spricht allerdings, daß er bei anderen Dateien 404 senden kann.

    Ein Auszug aus Deiner .htaccess wäre nett und brauchbar, insbesondere Abschnitte mit der Zuweisung der Typen sowie ErrorDocument-Anweisungen.

    Oder Du benennst einfach deine PHP-Dateien vernünftig mit .php und geht den oben ausführlich beschriebenen Weg :)

    Gruß,
      soenk.e

    1. Hi Sönke,

      ich habe meine .htaccess so konfiguriert, dass auch Dateien mit
      der Endung "htm" und "html" geparsed werden.
      Das ist ein klein wenig unklug, da Du damit möglicherweise
      Serverresourcen sinnlos verbrätst.

      kommt das nicht darauf an, für welchen Teil der Dokumente diese Ein-
      stellung gilt? Ich habe beispielsweise ein Unterverzeichnis, welches
      ausschließlich SSI-Dateien enthält - innerhalb dieses Verzeichnisses
      wäre die oben genannte Konfiguration kein Nachteil.

      Dazu mußt Du leglich in Deiner obersten .htaccess
        options +multiviews
      einsetzen.

      Deinen Vorschlag in allen Ehren - aber die Begründung dafür erschließt
      sich mir nicht wirklich.

      Natürlich kostet das SSI-Parsen von Dokumenten Ressourcen. Aber das
      Verhandeln via Content Negotiation doch auch!

      Der Server muß ja erst mal das Verzeichnis parsen und alles, was auf
      den URL irgendwie matchen könnte, ermitteln. Dazu muß er eventuell
      eine ganze Menge Dateinamen prüfen.
      Danach muß er herausfinden, welche Verhandlungs-Dimension(en) er
      verwenden soll.
      Sag nicht, das sei trivial, wenn nur eine einzige Datei in Frage
      kommt - der Server kann das nicht durch "Hingucken" lösen, sondern
      nur algorithmisch. Und das geht nicht völlig kostenlos.

      Mehr Infos (falls überhaupt nötig) findest Du in der Apache-
      Anleitung unter
      http://httpd.apache.org/docs/mod/mod_negotiation
      (man beachte das fehlende .html am Ende:).

      Zur Klarstellung für die anderen Leser:
      Ja, die Apache-Dokumentation macht Content Negotiation - aber sie
      tut das _nicht_, um die Endung ".html" weglassen zu dürfen (das
      ist eher ein Abfallprodukt dabei), sondern um über den HTTP-Header
      für die Sprach-Präferenz eine dem Leser möglichst passende Variante
      des entsprechenden Dokuments auszuliefern. (Auch wenn nur wenige
      Dokumente in anderen Sprachen als Englisch vorliegen.)

      Viele Grüße
            Michael

      1. ich habe meine .htaccess so konfiguriert, dass auch Dateien mit
        der Endung "htm" und "html" geparsed werden.

        Das ist ein klein wenig unklug, da Du damit möglicherweise
        Serverresourcen sinnlos verbrätst.

        kommt das nicht darauf an, für welchen Teil der Dokumente diese Ein-
        stellung gilt? Ich habe beispielsweise ein Unterverzeichnis, welches
        ausschließlich SSI-Dateien enthält - innerhalb dieses Verzeichnisses
        wäre die oben genannte Konfiguration kein Nachteil.

        Ok, es mag brauchbare Lösungen geben. Ich hatte aber irgendwie den Eindruck, daß hier der Bequemlichkeit halber anstatt des Umschreibens aller Dateien und Verweise die Knüppellösung mit der Umstellung der Dateieendungen gewählt wurde.
        Das verstehe ich, der selber eine kleine dreistellige Anzahl an Seiten "auf Lager" hat, zwar nur zu gut, aber trotzdem ist dieser Weg IMHO suboptimal.

        Der Grund dafür liegt aber weniger in möglichen Leistungseinbußen, gerade angesichts der heutigen Maschinen. Aber dazu unten mehr.

        Dazu mußt Du leglich in Deiner obersten .htaccess
          options +multiviews
        einsetzen.

        Deinen Vorschlag in allen Ehren - aber die Begründung dafür erschließt
        sich mir nicht wirklich.

        Natürlich kostet das SSI-Parsen von Dokumenten Ressourcen. Aber das
        Verhandeln via Content Negotiation doch auch!

        Das kommt auf die Gegebenheiten an. Grundsätzlich muß mod_negotiation lediglich das Verzeichnis einlesen und alles raussuchen, was vorm Punkt mit dem gewünschten Objekt übereinstimmt. Und nur auf dieser Liste muß dann der schwierigere Teil, die "Verhandlung", durchgeführt werden.
        Ich behaupte mal so, daß in den seltensten Fällen in dieser Verhandlungsphase noch mehr als zwei oder drei Möglichkeiten offen stehen und es sollte ein leichtes sein, hier das passende Objekt rauszusuchen. Rein vom Gefühl her würde ich sogar soweit gehen und sagen, daß das Einlesen des Verzeichnisses wegen möglicherweise notwendiger Plattenzugriffe länger dauern könnte, als das aushandeln.

        Davon aber ganz abgesehen: Im hier vorliegenden Fall ist es definitiv nur eine einzige Datei, die zur Auswahl steht - die Verhandlung fällt also komplett weg.

        Von daher sehe ich die Multiviews-Option hier als weniger resourcenintensiv an als das Durchsuchen von kilobytegroßen Dateien nach SSI-Direktiven oder, wie es hier der Fall ist, jede Datei durch den PHP-Interpreter zu jagen.

        Aber ich will mich nicht um Millisekunden streiten, ich hab's auch nie ausgemessen und auch keine Studie dazu gelesen.

        Der eigentliche VORTEIL, um den es mir bei Multiviews geht, liegt doch ganz woanders:

        !!  Es fällt jede Änderung der Dateinamen und Verweise ersatzlos weg. !!

        Ich habe seit '99 auf meinem Server die Seiten von normalem HTML (.html) auf SSI (.shtml) und mittlerweile teilweise auch auf PHP (.php) umgestellt. Dazu kommen dann noch ein paar, vielleicht nicht immer unbedingt nötige Änderungen am Grafikformat (gif -> png).

        Bei guter Vernetzung kann man davon ausgehen, daß auf jede Seite drei bis vier Verweise zeigen. Zusammen mit der genannten dreistelligen Anzahl an Seiten ist das -mit Verlaub- jedesmal eine scheiß Arbeit.

        Und genau das ist der Punkt. Die ganze stupide, nervtötende Verweisänderungsorgie fällt weg, wenn man von Anfang an die Dateiendungen bei Verweisen weglässt. Ich kann jetzt jede beliebe Datei fröhlich von HTML in SSI ändern, dann nach PHP und wenn's mir nicht gefällt, wieder zurück nach HTML.
        Webseiten wachsen nunmal und ich kann nur sagen, daß niemand behaupten sollte, ihm würde sowas nie passieren.

        Der Vollständigkeit halber: Weitere, positive Effekte, zum Beispiel

        • von außen kriegt keiner die Änderung mit, sprich: Suchmaschineneinträge und Lesezeichen behalten ihre Gültigkeit.

        • erweiterte Möglichkeiten, wie zum Beispiel vorkomprimierte Dateien oder verschiedene Sprachen unter einer Adresse.

        Sollte man zwar beides nicht unterschätzen, aber gegenüber der eigenen, oben genannten Arbeitsersparnis zählt das IMHO nur noch am Rande.

        Glaubt's mir, ich hatte den Ärger schon :)

        Gruß,
          soenk.e

        1. Hi Sönke,

          Davon aber ganz abgesehen: Im hier vorliegenden
          Fall ist es definitiv nur eine einzige Datei, die
          zur Auswahl steht - die Verhandlung fällt also
          komplett weg.

          keineswegs!

          Daß nur eine einzige Datei verfügbar ist, heißt doch
          noch lange nicht, daß diese auch tauglich im Sinne der
          Verhandlung ist!
          Die Verhandlung kann sehr wohl zum Ergebnis "keine
          taugliche Variante verfügbar" führen, wobei der Apache
          dann ggf. eine Liste aller möglichen Dokumente gene-
          riert.
          Klick mal auf
          http://www.schroepl.net/projekte/mod_gzip/cache.shtml

          • und zwar einmal mit "de" in der Liste Deiner zulässigen Sprachen und einmal ohne ... das ist so
            ein "eindeutiger" Treffer, wo aber dennoch verhandelt
            werden muß.

          Glaubt's mir, ich hatte den Ärger schon :)

          Das glaube ich Dir ja alles. Cheatah wirbt ja auch
          ständig dafür.
          Nur halte ich die Erklärung, das sei ressourcen-
          schonender auf der Maschine, für nicht plausibel.

          Viele Grüße
                Michael

          1. Davon aber ganz abgesehen: Im hier vorliegenden
            Fall ist es definitiv nur eine einzige Datei, die
            zur Auswahl steht - die Verhandlung fällt also
            komplett weg.

            keineswegs!

            Daß nur eine einzige Datei verfügbar ist, heißt doch
            noch lange nicht, daß diese auch tauglich im Sinne der
            Verhandlung ist!

            Ok, stimmt. Auch wenn die in diesem Fall einzige Prüfung ("Akzeptiert der Browser text/html?") nicht sonderlich schwierig sein dürfte.

            Nur halte ich die Erklärung, das sei ressourcen-
            schonender auf der Maschine, für nicht plausibel.

            War wie gesagt auch nicht mein Hauptanliegen.

            Gruß,
              soenk.e