frankx: nach nach mod-rewrite sind bilder und styles (fast) weg

Hellihello,

mit mod_rewrite hatte ich bisher nur var_dumps ausgegeben. Nun binde ich eine reale Seite ein, die kommt auch, aber die Bilder werden nicht angzeigt, und von den Stylesheetangaben bleiben nur drei am Ende des Dokuments (linksseitige Rahmen) übrig. Wenn ich den Quelltext aber als normale Datei abspeicher, die .htacess lösche und die Datei direkt aufrufe, alles wieder prima. Mir fehlt grad der Ansatz. RewriteBase / ist gesetz. Weglassen hilft auch nichts. Issich lokaler Verweis: RewriteRule .* index_rewrite.php.

Dank und Gruß,

frankx

  1. hi,

    mit mod_rewrite hatte ich bisher nur var_dumps ausgegeben. Nun binde ich eine reale Seite ein, die kommt auch, aber die Bilder werden nicht angzeigt, und von den Stylesheetangaben bleiben nur drei am Ende des Dokuments (linksseitige Rahmen) übrig. Wenn ich den Quelltext aber als normale Datei abspeicher, die .htacess lösche und die Datei direkt aufrufe, alles wieder prima. Mir fehlt grad der Ansatz. RewriteBase / ist gesetz. Weglassen hilft auch nichts. Issich lokaler Verweis: RewriteRule .* index_rewrite.php.

    Wie so viele schon vor dir mit diesem "Problem" hast auch du höchstvermutlich nicht berücksichtigt, dass die relativ angegebenen Pfade externer Ressourcen der Client vervollständigt.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hellihello wahsaga,

      Danke für die Antwort.

      Wie so viele schon vor dir mit diesem "Problem" hast auch du höchstvermutlich nicht berücksichtigt, dass die relativ angegebenen Pfade externer Ressourcen der Client vervollständigt.

      Öhm, im Quelltext find ich das nicht, oder? Also auf example.com findet sich direkt im obersten Verzeichnis sowohl die .htacess wie auch die rewrite_index.php wie auch alle Resourcen "css.css" und "bild.png" in keinem Unterordner. Muss ich alle Pfade absolut angeben?

      Dank und Gruß,

      frankx

  2. Hellihello,

    "RewriteRule .* index_rewrite.php." - heißt doch, dass alle Anfragen mit der index_rewrite.php beantwortet werden, oder? Denn denn die Absolute Pfadangabe im Browser http://example.com/bild.png gab mir auch diese Ausgabe. Müssten dann also Dateiendungen wie png, jpg etc ausgenommen, werden. Hui, das wäre aber eine Fummelei.

    Gruß,

    frankx

    1. hi,

      "RewriteRule .* index_rewrite.php." - heißt doch, dass alle Anfragen mit der index_rewrite.php beantwortet werden, oder? Denn denn die Absolute Pfadangabe im Browser http://example.com/bild.png gab mir auch diese Ausgabe. Müssten dann also Dateiendungen wie png, jpg etc ausgenommen, werden.

      Entweder das - oder die Definition umzuschreibender Requests enger eingeschränkt werden.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hellihello wahsaga,

        Dank für Deine Antwort. Komischerweise funktioniert

        RewriteRule (.*)  index_rewrite.php
        RewriteRule ^(.*).css$   $1.css

        aber nicht für css.css. Nehm ich das allgemeinere Statement darüber aber raus, gehts. Gibts da eine Rangfolge?

        Gruß,

        frankx

        1. hi,

          Komischerweise funktioniert

          RewriteRule (.*)  index_rewrite.php
          RewriteRule ^(.*).css$   $1.css

          aber nicht für css.css. Nehm ich das allgemeinere Statement darüber aber raus, gehts.

          Na was passiert denn wohl mit der Anfrage nach css.css, wenn sie auf die erste RewriteRule trifft?

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hellihello wahsaga,

            Na was passiert denn wohl mit der Anfrage nach css.css, wenn sie auf die erste RewriteRule trifft?

            Ja, das kapier ich halt nicht. Hört der Apache dann auf, weiterzulesen. Wenn ichs umdrehe (erst css, dann komplett wildcard) gehts auch nicht. Auch weiß ich nicht, wie ich einen regulären Ausdruck bauen kann der css|jpg|gif ausschließt.

            Im Grund soll es doch heißen,

            schick *.jpg nach *.jpg
            schick *.css nach *.css

            etc.

            den rest nach rewrite_index.php

            Ich find auch kein Beispiel dafür, was mich wundert, weil ich dachte (ich weiß, das sollt ich vielleicht lieber lassen), dass das ein gängiges Konzept sein könnte.

            Dank und Gruß,

            frankx

            1. hi,

              Ja, das kapier ich halt nicht. Hört der Apache dann auf, weiterzulesen.

              Nö, warum sollte er?

              Wenn ichs umdrehe (erst css, dann komplett wildcard) gehts auch nicht.

              Na weil dein "komplett Wildcard" dann immer noch _alles_ erwischt.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Hellihello wahsaga,

                Dank für Deine Mühe.

                Jetzt habe ich:

                RewriteRule ^(.*).css$   $1.css
                RewriteRule ^(.*).PNG$   $1.PNG
                RewriteRule ^(.*).gif$   $1.gif

                RewriteRule  !(.*)(.css|.PNG|.gif)$ index_rewrite.php

                Das scheint zu gehen. Das letzte Rule sollte jetzt heißen:

                "alle die nicht auf .css oder .PNG oder .gif enden." Oder ist da was quergedacht/-gemacht?

                Dank und Gruß,

                frankx

                1. hi,

                  Jetzt habe ich:

                  RewriteRule ^(.*).css$   $1.css
                  RewriteRule ^(.*).PNG$   $1.PNG
                  RewriteRule ^(.*).gif$   $1.gif

                  RewriteRule  !(.*)(.css|.PNG|.gif)$ index_rewrite.php

                  Das scheint zu gehen.

                  Wozu sollen die ersten drei Rules gut sein - um diese angeforderten Ressourcen auf das umzuschreiben, was sie sowieso schon sind?

                  Und das (.*) aus der letzten Rule sollte entfallen können.
                  Die Punkte, die als Punkt gemeint sind, sollten allerdings maskiert werden.

                  gruß,
                  wahsaga

                  --
                  /voodoo.css:
                  #GeorgeWBush { position:absolute; bottom:-6ft; }
                  1. Hellihello wahsaga,

                    klingt logisch, ist ja auch schon spät.

                      
                    RewriteRule  !(\.css|\.PNG|\.gif)$ index_rewrite.php  
                    
                    

                    wäre das dann und sollte reichen, ja.

                    Dank und Gruß,

                    frankx

                2. Hellihello,

                  besser wohl, die Quellen alle ins Verzeichnis "quellen" zu tun, und dann mit

                    
                  RewriteBase /rewrite_tests  
                    
                  RewriteRule quellen/(.*)$   quellen/$1  
                    
                  RewriteRule  !^quellen index_rewrite.php  
                  
                  

                  soll heißen, alles was auf Verzeichnis Quellen (quellen/) verweist, wird dahingeleitet, alles was keinen string "quellen" drin hat, wird an die index_rewrite.php geleitet. Und die weiß dann schon, was zu tun ist. Sonst hätte mensch ja ständig drauf zu achten, oder zu ergänzen, für jede Dateiendung.

                  Oder gibts da schlauere Projektverwaltungsszenarien und vielleicht einen Link dazu?

                  Dank und Gruß,

                  frankx