hotti: Knifflige Regel in Rewrite

hi,

folgende Regel ist gegeben:

RewriteCond %{REQUEST_URI} !^(.*).(cgi|css|jpg|js|gif)$
RewriteRule ^     /cgi-bin/pico.cgi

Der Manager ist pico.cgi und gibt alles aus, Request_Uri "/foo/bar" kann html sein oder gif....

Nun wäre es vielleicht gut (?), wenn "/foo/bar" ein GIF ist, dem URL auch die Erweiterung mitzugeben like "/foo/bar.gif".

Wenn ich das mache, meldet sich der Server mit 404. Wo muss ich ansetzen?

Hotti

  1. RewriteCond %{REQUEST_URI} !^(.*).(cgi|css|jpg|js|gif)$
    RewriteRule ^     /cgi-bin/pico.cgi

    Das schaut tatsächlich deutlich kniffliger(wirrer) formuliert aus, als es müsste. Mach Dir zunächst mal klar, was Du eigentlich umschreiben willst. _Danach_ packst Du es in eine Regel.

    http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html sei Dir ans Herz gelegt.

    [...]Wenn ich das mache, meldet sich der Server mit 404. Wo muss ich ansetzen?

    Dir scheint Basiswissen reguläre Ausdrücke zu fehlen. Zumindest sollte mit Grundkenntnissen schon offensichtlich sein, warum .gif$ auf Deine Condidtion nicht matcht und zum 404 führt?!

    1. hi,

      Dir scheint Basiswissen reguläre Ausdrücke zu fehlen. Zumindest sollte mit Grundkenntnissen schon offensichtlich sein, warum .gif$ auf Deine Condidtion nicht matcht und zum 404 führt?!

      Schon klar, dass ein URI, der mit .gif endet in der Cond nicht matcht ;)

      Genau das ist ja der Crux: Nehme ich gif aus der Cond. raus

      RewriteCond %{REQUEST_URI} !^(.*).(cgi|css|jpg|js)$
      RewriteRule ^     /cgi-bin/pico.cgi

      Werden Gifs in den Dokumenten, die pico.cgi zum Browser schickt, nicht angezeigt. Dafür darf ein URI auf .gif enden.

      Lasse ich gif in der Cond drin, funktioniert alles wie gewünscht, nur darf der URI nicht auf .gif enden.

      Vielleicht hast Du mit Deinem Basiswissen eine Idee zur Lösung der Aufgabenstellung: Ein URI darf Endungen haben.

      Hotti

      --
      Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
      1. [...] Vielleicht hast Du mit Deinem Basiswissen eine Idee zur Lösung der Aufgabenstellung: Ein URI darf Endungen haben.

        Oh mann... Schwätzer, Du redest wirr! Wiederholung: Mach Dir zunächst klar, was Du eigentlich willst!

        Glaskugelmäßig könnte man folgendes vermuten: Du möchtest alles auf Dein Pico-Managerdings umschreiben, was nicht als statisches File im Dateisystem liegt. Halte ich nicht zwangsläuftig für clever, aber es ist möglich, sagt die Doku.

        1. Hi,

          Glaskugelmäßig könnte man folgendes vermuten: Du möchtest alles auf Dein Pico-Managerdings umschreiben, was nicht als statisches File im Dateisystem liegt. Halte ich nicht zwangsläuftig für clever, aber es ist möglich, sagt die Doku.

          Meine Glaskugel (anderer Hersteller) vermutet, dass /foo/bar.gif als Datei existiert, aber genau dieser Request nach /foo/bar.gif trotzdem umgeschrieben werden soll. Da kann u.a. aktiviertes MultiViews dazwischen funken.

          MfG ChrisB

          --
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          1. hi,

            Meine Glaskugel (anderer Hersteller) vermutet, dass /foo/bar.gif als Datei existiert, aber genau dieser Request nach /foo/bar.gif trotzdem umgeschrieben werden soll. Da kann u.a. aktiviertes MultiViews dazwischen funken.

            Habe ich das Problem wirklich sooo schlecht beschrieben?

            /foo/bar
              /foo/bar.gif

            sind zwei verschiedene URLs die ein GIF zeigen. Wo die Datei liegt, spielt doch nun wirklich keine Rolle ;)

            Hotti

            1. Hi,

              Habe ich das Problem wirklich sooo schlecht beschrieben?

              /foo/bar
                /foo/bar.gif

              sind zwei verschiedene URLs die ein GIF zeigen.

              Wenn sie das wie gewünscht tun, existiert ja gar kein Problem.

              MfG ChrisB

              --
              RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        2. hi und danke,

          Glaskugelmäßig könnte man folgendes vermuten: Du möchtest alles auf Dein Pico-Managerdings umschreiben, was nicht als statisches File im Dateisystem liegt. Halte ich nicht zwangsläuftig für clever, aber es ist möglich, sagt die Doku.

          Du kannst Dir wahrscheinlich gar nicht vorstellen, wie mächtig Rewrite in Verbindung mit OOP ist. Dieses Managerdings pico.cgi (halbe DIN-A4-Seite, den Namen werde ich beibehalten) lädt ein Modul und das zieht eine Minimal-Config an, pico.ini:

          [/badesachen/kunden/forum]
          title = Das Forum für Trockenschwimmer
          isa = forum

          [/badesachen/herren/hose/xxl/1]
          title = Eine Badehose für richtige Männer
          descr = Kariert in Blau und Grün vorrätig
          preis = 99 €
          isa = article

          [..]

          Über diese ini werden weitere Module geladen, z.B. Warenkorb.pm, wenn das CMS als Shop arbeitet oder Forum.pm... Diese u.a. Funktionalitäten sind vollständig integriert, isa = forum erzeugt z.B. eine Seite mit Formular, so dass gepostet werden kann; mit dem POST wird ein neues Objekt erzeugt, was vom Vorgänger die Eigenschaften erbt, u.a. auch isa = forum. Forum erbt von tree und schon wird das Forum dargestellt usw....

          Das Problem habe ich gelöst und gerade eben mit Erfolg getestet, die Lösung besteht darin, die erste Regel mit [L]ast zu flaggen, in einer weiteren Condition die Umkehrung der Ersten zu prüfen und schließlich die erste Regel erneut anzuwenden bei Bedarf:

          [/badesachen/fun/klatscher.avi]
          title = Mod Rewrite erzeugt riesige Wellen
          descr = Lachen Sie mit
          type = video/x-msvideo

          Das alles schreibe ich nicht, weil ich ein Schwätzer bin, sondern damit Du verstehst, worum es eigentlich geht ;)

          Schöne Grüße,
          Horst

          1. Ach hotti ...

            Das alles schreibe ich nicht, weil ich ein Schwätzer bin, sondern damit Du verstehst, worum es eigentlich geht ;)

            Doch, du bist wieder mal ein Schwätzer, und du beweihräucherst wieder mal dein ach so tolles System, als hättest du MVC persönlich erfunden.

            Nur weil dich das ganze so verzückt und vielleicht auch erstaunt, dass es funktioniert, brauchst du nicht ständig so tun, als hätten alle anderen überhaupt keine Ahnung und du müsstest es ihnen lang und breit erklären.

            Zur Klärung der Faktenlage des Problems, welches du hier diskutieren wolltest, trägt der ganze Sermon kein bisschen Neues oder gar Erhellendes bei.

            Also, liefere bitte für das konkrete Problem relevante Fakten - or STFU.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Ach ChrisB,

              Nur weil dich das ganze so verzückt und vielleicht auch erstaunt, dass es funktioniert, brauchst du nicht ständig so tun, als hätten alle anderen überhaupt keine Ahnung und du müsstest es ihnen lang und breit erklären.

              Es ist doch so: Wenn alle URIs per Rewrite auf ein Script umgeschossen werden, was auch den status 404 handelt, dann aber der Webserver selbst einen 404 wirft, ist es doch klar dass die Regel nicht matcht.

              Da muss mir doch keiner erzählen, dass mein Basiswissen zu RegEx beschränkt ist, das ist reichlich daneben, wenn nicht sogar arrogant.

              Trotzdem sage ich Danke ;)
              Viele Grüße,
              Hotti

              1. Da muss mir doch keiner erzählen, dass mein Basiswissen zu RegEx beschränkt ist, das ist reichlich daneben, wenn nicht sogar arrogant.

                Die Betrachtung Deines Beispiels aus dem OP

                folgende Regel ist gegeben:
                RewriteCond %{REQUEST_URI} !^(.*).(cgi|css|jpg|js|gif)$
                RewriteRule ^     /cgi-bin/pico.cgi

                liefert ausreichend Hinweise dafür.

              2. Hi,

                Es ist doch so: Wenn alle URIs per Rewrite auf ein Script umgeschossen werden, was auch den status 404 handelt, dann aber der Webserver selbst einen 404 wirft, ist es doch klar dass die Regel nicht matcht.

                Wenn das so klar ist, was soll uns dann das ganze restliche Geschwafel über den Aufbau deines tollen Systems interessieren?

                Da muss mir doch keiner erzählen, dass mein Basiswissen zu RegEx beschränkt ist, das ist reichlich daneben, wenn nicht sogar arrogant.

                Wenn du selbst schon „weißt“, dass die nicht matchende Regel das Problem ist - dann solltest du dir Ursache mit deinem Wissen über RegEx ja auch finden können.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                1. hi,

                  Wenn das so klar ist, was soll uns dann das ganze restliche Geschwafel über den Aufbau deines tollen Systems interessieren?

                  Moment, mein System ist ja erst jetzt so richtig toll ;)

                  Btw., die Aufgabenstellung (ganz unten) hatte ich nachgereicht.

                  Lieber 'n Glas Wasser?

                  Hotti

                  --
                  Y <- Wasser, Y <- Osaft, Y <- leer (kriegt mod_rewrite)
              3. Hi!

                Es ist doch so: Wenn alle URIs per Rewrite auf ein Script umgeschossen werden, was auch den status 404 handelt, dann aber der Webserver selbst einen 404 wirft, ist es doch klar dass die Regel nicht matcht.

                Hast du dich davon im RewriteLog überzeugt? Es ist nämlich auch so, dass es 404er gibt, wenn die Regel matcht, aber zu einem Ziel weiterleitet, das nicht existiert.

                Du musst übrigens auch nicht von URI sprechen, wenn hier nur deren Untermenge URL relevant ist.

                Lo!

            2. Moin,

              Das alles schreibe ich nicht, weil ich ein Schwätzer bin, sondern damit Du verstehst, worum es eigentlich geht ;)

              Doch, du bist wieder mal ein Schwätzer, und du beweihräucherst wieder mal dein ach so tolles System, als hättest du MVC persönlich erfunden.

              Beachte bitte, dass an meinen Ergebnissen auch SELFHTML/FORUM einen nicht unerheblichen Anteil hat, das ist doch eine erfreuliche Sache.

              Konkret gehts hier darum, die kontroverse Diskussion zum Thema "Dateiendungen in URLs Ja/Nein" (siehe Forumsarchiv) unter einen Hut zu bringen und das tut seit gestern.

              Schönes Wochenende,
              Hotti

          2. Du kannst Dir wahrscheinlich gar nicht vorstellen, wie mächtig Rewrite in Verbindung mit OOP ist.

            Du hast offenbar keinen blassen Schimmer, wie wenig das eine mit dem anderem zu tun hat.

  2. Hi,

    Nun wäre es vielleicht gut (?), wenn "/foo/bar" ein GIF ist, dem URL auch die Erweiterung mitzugeben like "/foo/bar.gif".

    Wenn ich das mache, meldet sich der Server mit 404. Wo muss ich ansetzen?

    Da deine Problembeschreibung nicht wirklich nachvollziehbar ist, wirst du dir wohl selber helfen müssen:

    Schau ins Access- und Error-Log, welche Spuren ein solcher Request dort hinterlässt.
    Aktiviere zusätzlich das Rewrite-Log*. Das ist auf höchstem Level etwas sehr geschwätzig, womit ihr beide zwar auf einer Wellenlänge liegen dürftet - aber manchmal ist dieser Überfluss an Information auch etwas zu viel des guten, deshalb würde ich es erst einmal mit einem der Werte aus dem mittleren Bereich probieren.

    Und wenn du damit noch nicht zur Lösung des Problems kommst - dann poste bitte relevante Ausschnitte aus diesen Logs hier.

    MfG ChrisB

    * Das erfordert Zugriff auf die Serverkonfiguration, aber ich gehe mal davon aus, dass du das auf einem Server testest, wo du entsprechenden Zugriff hast.

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hi,

      Nun wäre es vielleicht gut (?), wenn "/foo/bar" ein GIF ist, dem URL auch die Erweiterung mitzugeben like "/foo/bar.gif".

      Wenn ich das mache, meldet sich der Server mit 404. Wo muss ich ansetzen?

      Da deine Problembeschreibung nicht wirklich nachvollziehbar ist, wirst du dir wohl selber helfen müssen:

      Ja, habe ich, Problem ist gelöst.

      Schau ins Access- und Error-Log, welche Spuren ein solcher Request dort hinterlässt.

      Wenn der Webserver einen 404 ausgibt, steht das auch im Log, das kann ich bestätigen ;)

      Aktiviere zusätzlich das Rewrite-Log*.

      Wenn die Rewrite-Rule nicht greift, steht im Rewrite-Log: nichts ;)

      Das ist auf höchstem Level etwas sehr geschwätzig, womit ihr beide zwar auf einer Wellenlänge liegen dürftet

      Wie, machst jetzt bei uns mit!? (danke Alexander Dittner, Cut...)

      • aber manchmal ist dieser Überfluss an Information auch etwas zu viel des guten, deshalb würde ich es erst einmal mit einem der Werte aus dem mittleren Bereich probieren.

      Möchtest Du einen Orangensaft?

      Viele Grüße,
      Hotti

      --
      YYY <= Gläser für den Orangensaft.
      1. Hi!

        Aktiviere zusätzlich das Rewrite-Log*.
        Wenn die Rewrite-Rule nicht greift, steht im Rewrite-Log: nichts ;)

        Falsch. Da steht dann drin, dass es nicht matched. Im RewriteLog stünde nur dann nichts, wenn die .htaccess nicht beachtet wird, oder die Regeln in einem bedingten <...>-Container stehen, dessen Inhalt nicht beachtet wird.

        Lo!