Sympathisant: Apache RewriteRule - Anfragen an ein best. Verzeichnis weiterlei

Hai,

ich habe vor laengere Zeit hier bereits die Frage gestellt, wie ich saemtliche *.html-Anfragen auf ein definiertes Verzeichnis mappen kann.
Dank der Unterstuetzung hier kam ich zu folgendem Ergebnis:

RewriteRule ^([^/]+.html)$ sources/view/$1 [L]

Nun wuerde ich das gleich gerne auch fuer CSS-Files machen - so dass eine HTML-Seite im Include lediglich den Name der CSS-Datei angeben muss, ohne Pfadangaben. Also so etwas: <link rel="stylesheet" type="text/css" href="main.css">

Mein Ansatz:

RewriteRule ^([^/]+/.css)$ gui/css/$1 [L]

Also identisch mit dem ersten Beispiel. Doch im letzteren Falle moechte es einfach nicht klappen. Woran kann das liegen?

Des weiteren: Gelten die RewriteRule-Regeln generell fuer alle Anfragen? Also auch die, die aus einem Template heraus gemacht werden?

Mein AccessLog sagt:
127.0.0.1 - - [18/Jun/2009:19:37:06 +0800] "GET /example/main.css HTTP/1.1" 404 1118

Laut der RewriteRule sollte es doch
127.0.0.1 - - [18/Jun/2009:19:37:06 +0800] "GET /example/gui/css/main.css HTTP/1.1" 404 1118
sein - oder habe ich da was nicht richtig verstanden?

Besten Dank!

MfG,
Sympatisant

--
"Only half the World is Teflon and Asbestos, the Rest is burnable"
  1. hi,

    Mein AccessLog sagt:
    127.0.0.1 - - [18/Jun/2009:19:37:06 +0800] "GET /example/main.css HTTP/1.1" 404 1118

    Laut der RewriteRule sollte es doch
    127.0.0.1 - - [18/Jun/2009:19:37:06 +0800] "GET /example/gui/css/main.css HTTP/1.1" 404 1118
    sein - oder habe ich da was nicht richtig verstanden?

    Obenstehener Log-Eintrag ist ok, der Apache logt also den requested URI und nicht das, was Rewrite daraus macht.

    Allerdings hast Du da einen 404er Status stehen, die Datei fehlt. Und [L] macht Folgendes:

    [L] Last | Bearbeitung abschliessen, keine weiteren Regeln anwenden.

    Daher wird Deine zweite Regel ignoriert.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Hai Hotti,

      danke fuer deine Antwort!

      Ich habe jetzt folgendes, funktionierendes Ergebnis:

      RewriteEngine on
      AddType application/x-httpd-php .html
      RewriteRule ^([^/]+.html)$ sources/view/$1 [L]
      RewriteRule ([^/]+.css) gui/css/$1 [L]

      Das mit dem [L] habe ich nicht ganz verstanden.
      Obiges Beispiel funktioniert sowohl mit als auch ohne der Angabe [L].

      Aber da kann ich mich auch selber schlau machen..

      Danke!

      MfG,
      Sympatisant

      --
      "Only half the World is Teflon and Asbestos, the Rest is burnable"
      1. hi,

        Aber da kann ich mich auch selber schlau machen..

        Ja; die Klammer setze ich z.B. auch anders, also nicht

        (.*.html)

        sondern
        RewriteRule ^(.*).html$ /cgi-bin/view.cgi?/$1.html

        das finde ich übersichtlicher, obwohl: Der Requested URI "/$1.html" ist auch in der CGI-Umgebung zu finden in REQUEST_URI, was innerhalb view.cgi ausgewertet werden könnte. Anstelle $1 in der Rule könnte ich dem Rewrite_target auch noch andere oder weitere Parameter übergeben, bspw. den Content-Type.

        Hotte

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  2. Hi,

    Gelten die RewriteRule-Regeln generell fuer alle Anfragen? Also auch die, die aus einem Template heraus gemacht werden?

    Sie gelten für alle über HTTP gemachten.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.