Ingo Turski: Fehler in mod_speling?!

Hi,

ich nutze einen Webspace, auf dem

Apache/1.3.37 (Unix) PHP/4.4.8 with Suhosin-Patch FrontPage/5.0.2.4803 mod_fastcgi/mod_fastcgi-SNAP-0404142202 mod_ssl/2.8.28 OpenSSL/0.9.6i

und u.a. mod_speling installiert ist.

Heute morgen bekam ich nun einen Schock, als ich eine meiner Seiten aufrief und diese ohne eingebundene Grafiken und css (mit 200) ausgeliefert wurde.

Jetzt habe ich gerade mit dem wirklich guten Kundendienst meines Providers gesprochen und der hat mir gesagt, dass es an mod_speling liegt, auf das ich als Kunde aber keinen Einfluss habe.

Wie ich herausgefunden habe, passiert folgendes:

/verzeichnis/dateiname.php -> liefert korrekt die Datei aus,
/verzeichnis/dateiname/ -> liefert ebenfalls diese Datei aus, aber die HTML-Referenzen stimmen natürlich nicht mehr.

Befindet sich in /verzeichnis/ nur eine dateiname.html oder dateiname.htm, dann kommt ein 404 - ebenso, wenn sich dort neben dateiname.php noch dateiname.html befindet.

Ich möchte nun einfach nur, dass solch fehlerhafte Eingaben mit 404 quittiert werden und könnte das - allerdings sehr umständlich in jeder einzelnen PHP-Datei - über Abfrage von $_SERVER['SCRIPT_NAME'], die mir dann
/verzeichnis/dateiname/ ausgibt ($_SERVER['PHP_SELF'] gibt übrigens nur /verzeichnis/dateiname aus) erreichen, aber gibt es da nicht doch einen einfacheren Weg?

Kann ich über meine .htaccess (z.B. über mod_rewrite) etwas dran ändern?
Oder gibt es eine Version von mod_speling, die diesen Fehler nicht hat und die ich meinem Provider zum Austausch anbieten könnte?
Oder...?

freundliche Grüße
Ingo

  1. Hi,

    Jetzt habe ich gerade mit dem wirklich guten Kundendienst meines Providers gesprochen und der hat mir gesagt, dass es an mod_speling liegt, auf das ich als Kunde aber keinen Einfluss habe.

    Nun ja, die <http://httpd.apache.org/docs/1.3/mod/mod_speling.html#checkspelling@title-Direktive CheckSpelling> waere zumindest auch im Kontext einer .htaccess-Datei verwendbar.
    Oder ist dir ".htaccess" generell nicht erlaubt?

    Wie ich herausgefunden habe, passiert folgendes:

    /verzeichnis/dateiname.php -> liefert korrekt die Datei aus,
    /verzeichnis/dateiname/ -> liefert ebenfalls diese Datei aus, aber die HTML-Referenzen stimmen natürlich nicht mehr.

    Man koennte versuchen, per mod_rewrite einzugreifen, wenn die "falsche" Adresse angefordert wird.
    Oder die Verweise auf die Ressourcen relativ zur Domainwurzel angeben :-)

    Kann ich über meine .htaccess (z.B. über mod_rewrite) etwas dran ändern?

    Klar - wenn /verzeichnis/dateiname/ angefordert wird, schreib's auf /verzeichnis/dateiname.php um.

    Um den Aufruf real existierender Verzeichnisse nicht zu stoeren, ggf. noch eine RewriteCond davorbasteln, die ueberprueft, ob es das Verzeichnis /verzeichnis/dateiname/ gibt.

    Oder gibt es eine Version von mod_speling, die diesen Fehler nicht hat und die ich meinem Provider zum Austausch anbieten könnte?

    Bin mir nicht sicher, ob das als "Fehler" betrachtet wird, oder gewuenschtes Verhalten darstellt.

    Mir war mod_speling jedenfalls immer schon suspekt.
    Ein Inhalt hat *einen* korrekten URL zu haben - und ein Server hat nicht auf mehrere "aehliche lautende" Anfragen "grosszuegigerweise" mit dem gleichen Inhalt zu antworten. Das hat einen 404/410 zu geben, Punkt. (Das man in dem damit ausgelieferten Dokument dann ggf. "meinten sie vielleicht $richtige_schreibweise?"-Links ausgibt, ist eine andere Sache.)

    MfG ChrisB

    1. Linkkorrektur:

      Nun ja, die Direktive CheckSpelling waere zumindest auch im Kontext einer .htaccess-Datei verwendbar.

      MfG ChrisB

    2. Hi,

      Nun ja, die Direktive CheckSpelling waere zumindest auch im Kontext einer .htaccess-Datei verwendbar.
      Oder ist dir ".htaccess" generell nicht erlaubt?

      nein, natürlich nicht. Aber was müsste ich dann konkret eintragen?

      Man koennte versuchen, per mod_rewrite einzugreifen, wenn die "falsche" Adresse angefordert wird.

      Dann müsste ich aber wohl jede vorhandene (und zukünftig erstellte) PHP-Datei berücksichtigen, oder?

      Oder die Verweise auf die Ressourcen relativ zur Domainwurzel angeben :-)

      das möchte ich wirklich vermeiden.

      Kann ich über meine .htaccess (z.B. über mod_rewrite) etwas dran ändern?

      Klar - wenn /verzeichnis/dateiname/ angefordert wird, schreib's auf /verzeichnis/dateiname.php um.

      Für jede einzelne PHP-Datei? Da wäre ein genereller include "mod_speling-error.php" einfacher...

      Oder gibt es eine Version von mod_speling, die diesen Fehler nicht hat und die ich meinem Provider zum Austausch anbieten könnte?

      Bin mir nicht sicher, ob das als "Fehler" betrachtet wird, oder gewuenschtes Verhalten darstellt.

      Mir war mod_speling jedenfalls immer schon suspekt.
      Ein Inhalt hat *einen* korrekten URL zu haben

      das sehe ich auch so. Aber ich kann das Modul leider (noch) nicht deaktivieren.
      Als einen Fehler betrachte ich es allerdings schon, da die Referenzen wie gesagt nicht mehr stimmen und ein nicht vorhandenes Verzeichnis nicht als existent ausgeliefert werden sollte.

      freundliche Grüße
      Ingo

      1. Hi Ingo,

        nein, natürlich nicht. Aber was müsste ich dann konkret eintragen?

        In der neueren Version von Apache ist es verständlicher dokumentiert wie ich finde… Ich würde übrigens davon ausgehen, dass bei deinem Provider auch eher ein Apache 2.0 oder 2.2 zum Einsatz kommt, statt einem Apache 1.3.

        das sehe ich auch so. Aber ich kann das Modul leider (noch) nicht deaktivieren.

        Doch, kannst du - vorausgesetzt, dein Provider hat dich mit einem entsprechenden (siehe CheckSpelling) AllowOverride ausgestattet.

        Viele Grüße,
          ~ Dennis.

        1. Hi,

          In der neueren Version von Apache ist es verständlicher dokumentiert wie ich finde… Ich würde übrigens davon ausgehen, dass bei deinem Provider auch eher ein Apache 2.0 oder 2.2 zum Einsatz kommt, statt einem Apache 1.3.

          vielen Dank. Wie mir scheint, ist mein Problem mit Apache2 gelöst. Ich werde mal meinen Provider fragen, ob er diese Version installieren will oder meine Domain auf einen Server mit dieser Version legen kann.

          das sehe ich auch so. Aber ich kann das Modul leider (noch) nicht deaktivieren.

          Doch, kannst du - vorausgesetzt, dein Provider hat dich mit einem entsprechenden (siehe CheckSpelling) AllowOverride ausgestattet.

          also Options -Indexes bzw. +Indexes wirkt. (Wie) kann ich das dann?
          CheckSpelling Off in der .htaccess wirkt sich (wie gerade gepostet) überhaupt nicht aus.

          freundliche Grüße
          Ingo

      2. Hi,

        Nun ja, die Direktive CheckSpelling waere zumindest auch im Kontext einer .htaccess-Datei verwendbar.
        Oder ist dir ".htaccess" generell nicht erlaubt?
        nein, natürlich nicht. Aber was müsste ich dann konkret eintragen?

        Nu' komm, bisschen Dokus lesen sollte bei dir doch aber auch drin sein!

        "This directive enables or disables the spelling module."

        Na, wat macht also der Eintrag
        CheckSpelling Off
        in der .htaccess jetzt wohl ...?

        Klar - wenn /verzeichnis/dateiname/ angefordert wird, schreib's auf /verzeichnis/dateiname.php um.
        Für jede einzelne PHP-Datei?

        Wenn das angeforderter Verzeichnis nicht existiert (RewriteCond mit entsprechendem Falg ueberprueft das) - dann schreib's auf $1.php um.
        Wenn diese Datei auch nicht existiert - dann gibt's halt einen 404.

        Als einen Fehler betrachte ich es allerdings schon, da die Referenzen wie gesagt nicht mehr stimmen und ein nicht vorhandenes Verzeichnis nicht als existent ausgeliefert werden sollte.

        Na ja, ist halt die Frage, was du von einem Modul zur Korrektur von Tippfehlern in URLs erwartest.
        "Huch, hatter sich vertippt, das Verzeichnis /verzeichnis/dateiname/ gibt's gar nicht - hatter bestimmt /verzeichnis/dateiname.php gemeint ..." - wenn man definiert, das mod_speling sowas leisten *soll*, dann macht's seine Arbeit wohl korrekt.
        Aber wie gesagt, fuer wirklich *hilfreich* erachte ich derartige "Korrekturen" auch nicht.

        MfG ChrisB

        1. Hi,

          nein, natürlich nicht. Aber was müsste ich dann konkret eintragen?

          Nu' komm, bisschen Dokus lesen sollte bei dir doch aber auch drin sein!

          "This directive enables or disables the spelling module."

          Na, wat macht also der Eintrag
          CheckSpelling Off
          in der .htaccess jetzt wohl ...?

          nichts! nicht mal einen 500.

          Wenn das angeforderter Verzeichnis nicht existiert (RewriteCond mit entsprechendem Falg ueberprueft das) - dann schreib's auf $1.php um.

          sorry, aber da ich keinen eigenen Server verwalte, kenne ich mich damit nicht aus. Bitte etwas genauer. Welches Flag? (Ich habe auch noch nicht vor, Server zu verwalten und mich in das Apache-Manual einzulesen - nur halt diesen dummen Fehler entdeckt.)

          "Huch, hatter sich vertippt, das Verzeichnis /verzeichnis/dateiname/ gibt's gar nicht - hatter bestimmt /verzeichnis/dateiname.php gemeint ..." - wenn man definiert, das mod_speling sowas leisten *soll*, dann macht's seine Arbeit wohl korrekt.

          Aber warum dann nur bei Vprhandensein von *.php ohne andere gleichlautende Dateien mit anderen Erweiterungen? Ich finde das ziemlich suspekt.

          freundliche Grüße
          Ingo