Ein Mensch: htaccess: einfach Rewrite für ein Bild

Hallo,

ich habe unter
http://domain.tld/pub/uploads/image.png

ein Bild, das ich gerne als

http://domain.tld/image.png verlinken würde (vllt. auch jpg..)

RewriteRule ^image.png$ ^/pub/uploads/image.png$

Doch leider funktioniert diese Regel nicht und ich bekomme unter der kurzen URL immer nur ein 404.

An sich funktioniert die .htaccess, weil da auch andere Regeln im Einsatz sind (für ein CMS). Ich probierte die Regel nach

RewriteEngine On
RewriteBase /

und vor

RewriteRule . /index.php [L]

zu platzieren.

Möge mir jemand sagen, wo ich den Fehler habe, so wäre ich sehr dankbar dafür.

Beste Grüße aus Berlin

  1. @@Ein Mensch:

    nuqneH

    http://domain.tld/pub/uploads/image.png

    [RFC2606]

    RewriteRule ^image.png$ ^/pub/uploads/image.png$ […]
    Möge mir jemand sagen, wo ich den Fehler habe, so wäre ich sehr dankbar dafür.

    Mehrere: erst kommt das Suchmuster, dann die Ersetzung.

    Die Ersetzung ist kein regulärer Ausdruck, da haben ^ und $ nichts zu suchen.

    Dann siehe Dokumentation:
    “The Substitution may be a:
    file-system […]
    URL-path […]
    Absolute URL […]”

    Möchtest du relativ referenzieren (.. für ein Verzeichnis hoch) oder einen absolut?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Hallo und danke für die Antwort,

      nuqneH

      ?

      Mehrere: erst kommt das Suchmuster, dann die Ersetzung.

      Okay, da war wohl mein Gedanke falsch, dass die Ersetzung ein Suchmuster im virtuellen Host wäre.

      Dann siehe Dokumentation:
      “The Substitution may be a:
      file-system […]
      URL-path […]
      Absolute URL […]”

      Okay, jetzt habe ich eine komplette URL angegeben:
      RewriteRule ^image.png$ http://domain.tld/pub/uploads/image.png

      Leider immer noch 404. :(

      Möchtest du relativ referenzieren (.. für ein Verzeichnis hoch) oder einen absolut?

      Absolut reicht völlig aus.

      1. Hallo,

        Okay, jetzt habe ich eine komplette URL angegeben:

        das war die schlechteste Idee - dann sendet der Apache nämlich als Antwort einfach ein HTTP-Redirect, und der Browser wird aufgefordert, die Ressource unter der "richtigen" selbst erneut anzufordern.

        RewriteRule ^image.png$ http://domain.tld/pub/uploads/image.png
        Leider immer noch 404. :(

        Hast du denn Ressourcen oder Dateien mit einem Backslash im Namen? Vermutlich nicht.

        Ciao,
         Martin

        --
        Ich bin 30. Ich demensiere apokalyptisch.
          (Orlando)
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hallo,

          Hast du denn Ressourcen oder Dateien mit einem Backslash im Namen? Vermutlich nicht.

          Der Backslash ist mir leider als Tippfehler (copy-paste aus vorigem Post) dazwischengekommen. In der RewriteRule existierte er schon nicht mehr.

  2. Hi,

    RewriteRule ^image.png$ ^/pub/uploads/image.png$

    Doch leider funktioniert diese Regel nicht

    Natürlich nicht - die Adresse, auf die du umschreiben willst, beginnt nicht mit ^ und endet nicht mit $.
    Statt diese Zeichen einfach per Copy&Paste zu übernehmen, hättest du dich mal informieren sollen, welche Bedeutung sie eigentlich haben - sie verankern den Suchausdruck am Anfang und Ende. In der Ersetzung hingegen sind sie vollkommen fehlplatziert.

    MfG ChrisB

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

      Natürlich nicht - die Adresse, auf die du umschreiben willst, beginnt nicht mit ^ und endet nicht mit $.
      Statt diese Zeichen einfach per Copy&Paste zu übernehmen, hättest du dich mal informieren sollen, welche Bedeutung sie eigentlich haben - sie verankern den Suchausdruck am Anfang und Ende. In der Ersetzung hingegen sind sie vollkommen fehlplatziert.

      Informiert habe ich mich über google, bin aber zum falschen Schluss gekommen (Suchmuster im virtuellen Host).

      Habe derweil die Regel verändert auf:
      RewriteRule ^image.png$ http:///pub/uploads/image.png

      Doch leider bringt mich das immer noch nicht ans Ziel (404). :(

      1. Habe derweil die Regel verändert auf:
        RewriteRule ^image.png$ http:///pub/uploads/image.png

        Doch leider bringt mich das immer noch nicht ans Ziel (404). :(

        Das bringt mit fast 100%iger Sicherheit keinen 404 da du wahrscheinlich keinen Eintrag für den Hostnamen "pub" in deinem DNS oder hosts-File hast. Welcher Webserver sollte dir also eine 404-Antwort verpassen?

        Ein URL wäre nicht verkehrt - ggf. auch ein [L]-Flag damit nicht eventuell spätere, allgemeinere Regeln greifen.

        1. Hi,

          RewriteRule ^image.png$ http:///pub/uploads/image.png
          Das bringt mit fast 100%iger Sicherheit keinen 404 da du wahrscheinlich keinen Eintrag für den Hostnamen "pub" in deinem DNS oder hosts-File hast.

          da ist was dran ... ;-)

          Ein URL wäre nicht verkehrt - ggf. auch ein [L]-Flag damit nicht eventuell spätere, allgemeinere Regeln greifen.

          Auch ein führender Slash beim Suchmuster wäre nicht schlecht. Wenn man es schon auf den Anfang des Suchausdrucks zwingt, sollte man auch das suchen, was am Anfang auftritt.

          Ciao,
           Martin

          --
          Paradox ist, wenn der Innenminister sich äußert und der Außenminister sich erinnert.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Auch ein führender Slash beim Suchmuster wäre nicht schlecht. Wenn man es schon auf den Anfang des Suchausdrucks zwingt, sollte man auch das suchen, was am Anfang auftritt.

            Kommt das nicht darauf an ob das in der Apache Config oder im .htaccess-File ist? Irgendwas war da mal, dass man die Pfade unterschiedlich angeben muss.

            1. Hi,

              Auch ein führender Slash beim Suchmuster wäre nicht schlecht. Wenn man es schon auf den Anfang des Suchausdrucks zwingt, sollte man auch das suchen, was am Anfang auftritt.
              Kommt das nicht darauf an ob das in der Apache Config oder im .htaccess-File ist? Irgendwas war da mal, dass man die Pfade unterschiedlich angeben muss.

              davon weiß ich nichts - ich habe mod_rewrite bisher immer lokal, also in der .htaccess konfiguriert, und die Suchmuster immer mit führendem Slash angegeben. Ich meine, das muss so sein ...

              So long,
               Martin

              --
              Paradox ist, wenn jemand eingefleischter Vegetarier ist.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. davon weiß ich nichts - ich habe mod_rewrite bisher immer lokal, also in der .htaccess konfiguriert, und die Suchmuster immer mit führendem Slash angegeben. Ich meine, das muss so sein ...

                Gefunden: Per-directory Rewrites (ganz unten, hat leider keinen Anker oder ID).

        2. Das bringt mit fast 100%iger Sicherheit keinen 404 da du wahrscheinlich keinen Eintrag für den Hostnamen "pub" in deinem DNS oder hosts-File hast. Welcher Webserver sollte dir also eine 404-Antwort verpassen?

          Oh man, ich brauche eine arbeitsfreundlichere Umgebung (oder mehr Kaffee), damit ich das copy-paste vernünftig hinkriege. :(

          Ein URL wäre nicht verkehrt - ggf. auch ein [L]-Flag damit nicht eventuell spätere, allgemeinere Regeln greifen.

          Okay, das scheint es zu sein. Es gibt dahinter eine allgemeinere Regel mit einem [L]-Flag dahinter. Jetzt würde ich gerne eine Ausnahmeregel definieren. Ich schmeiße mal google an, falls jemand da was zur Hand hat, wäre ich dafür natürlich auch zu haben.

          Danke schonmal an alle, die die Mühe dafür investieren.

          1. Ein URL wäre nicht verkehrt - ggf. auch ein [L]-Flag damit nicht eventuell spätere, allgemeinere Regeln greifen.

            Okay, das scheint es zu sein. Es gibt dahinter eine allgemeinere Regel mit einem [L]-Flag dahinter.

            Das macht nichts.

            Jetzt würde ich gerne eine Ausnahmeregel definieren.

            Schon klar, darum sollte deine Ausnahmeregel davor ja auch die letzte sein, wenn sie zutrifft.

            Ich schmeiße mal google an, falls jemand da was zur Hand hat, wäre ich dafür natürlich auch zu haben.

            Wie wäre es mit der Dokumentation und dort mal nachschlagen, was das L-Flag macht?