Orang Utan Klaus: mod_rewrite Problem: Regel ersetzt "zuviel"

Hallo,

ich habe folgendes Problem:

Wenn jemand an meine URL ein Bild mit der Endung "jpg" anhängt, soll eine Subsite gestartet werden, die dieses Bild anzeigt, etwa:

meinedomain.de/abcd.jpg

führt dann intern zu meinedomain.de/viewer.html?pic=abcd.jpg

Das funktioniert hiermit sehr gut:

RewriteRule ^(.*).jpg$ viewer.html?pic=$1.jpg

Nun werden durch diese Regel aber anscheinend nicht nur die jpgs in der URL, sondern auch die im HTML Code ersetzt. Wenn ich die Rule aktiv habe, werden auf allen Seiten keine .jpg Grafiken mehr gezeigt.
Was mache ich falsch?

Danke für jeden Tipp,
Klaus

  1. hi,

    Nun werden durch diese Regel aber anscheinend nicht nur die jpgs in der URL, sondern auch die im HTML Code ersetzt.

    aus welchem grund nimmst du an, dass der direkte request nach http://example.org/abcd.jpg und <img src="/blubb/bild.jpg" ...>
    von mod_rewrite in irgendeiner weise unterschiedlich bewertet werden sollten?

    beides bewirkt einen request vom client an deinen server, mit einem URL, auf den deine regel passt.

    also überlege dir, wie die regel stattdessen auszusehen hätte, damit sie auf bestimmte (von dir erstmal zu definierende) bild-URLs nicht mehr matcht.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hi Orang,

    RewriteRule ^(.*).jpg$ viewer.html?pic=$1.jpg

    Warum das so ist, hat dir wahsaga schon verraten - ein Request ist ein Request, egal ob der Browser ihn aufgrund eines IMG-Tags im HTML Code auslöst oder weil er Besucher die URL direkt eingegeben hat.

    Eine Möglichkeit das Problem zu lösen wäre, dass du die URL's die direkt auf ein Bild verweisen auf /view/pic_xy.jpg verweisen lässt und das intern umschreiben lässt. Oder alternativ auch andersherum: Alle Pfade im HTML Code werden angepasst auf /inline/pic_xy.jpg und lediglich Aufrufe /pic_xy.jpg werden umgeschrieben.

    Vielleicht mal so als Gedankenanstoß ... ;-)

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Krieg ist Gottes Art, den Amerikanern Geographie beizubringen. (Häfft)
    1. Vielen Dank, ich verstehe nun, warum das so ist.
      Leider ist mein Wissen über regular expressions zu begrenzt, um etwas schlaues zu generieren.

      Mir wäre schon sehr geholfen, wenn die Regel z.B. checken könnte, ob im Pfad ein "pic" vorkommt, das wäre dann ein internes Bild.

      Oder idealerweise einfach ein Check, ob der Request über eine URL erfolgt oder durch den Code.

      Ihr werdet Euch sicher totlachen über meine Unwissenheit.

      Die Option "www.meineurl.de/abcd.jpg" würde ich gerne beibehalten. Das haben doch schlauere Köpfe sicher schon gelöst, oder?

      Vielen Dank,
      Klaus

      1. Lieber Orang Utan Klaus,

        Leider ist mein Wissen über regular expressions zu begrenzt, um etwas schlaues zu generieren.

        Ändere das! Du kannst es! Es gibt gute Tutorials zu Regular Expressions. Und probieren geht über studieren.

        Mir wäre schon sehr geholfen, wenn die Regel z.B. checken könnte, ob im Pfad ein "pic" vorkommt, das wäre dann ein internes Bild.

        Ähm... _wo_ _genau_ soll da "pic" stehen?

        Oder idealerweise einfach ein Check, ob der Request über eine URL erfolgt oder durch den Code.

        Was meinst Du _damit_??? Es wurde doch schon erklärt, dass das nicht geht, da der Server einen Request erhält, der einfach nur ein Request ist, egal wie er zustande kam!

        Ihr werdet Euch sicher totlachen über meine Unwissenheit.

        Nein, ich bestimmt nicht. Und andere tun dies hier sicherlich auch nicht.

        Die Option "www.meineurl.de/abcd.jpg" würde ich gerne beibehalten. Das haben doch schlauere Köpfe sicher schon gelöst, oder?

        Die schlaueren Köpfe haben das für _ihre_ Bedürfnisse gelöst, nicht aber für _Deine_ Bedürfnisse. Dazu musst Du selbst aktiv werden und RegExe lernen. Mir hat das _sehr_ geholfen, denn es ist ein mächtiges Werkzeug! Auch wenn es am Anfang etwas schwer fallen mag.

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.