Apache RewriteRule - Anfragen an ein best. Verzeichnis weiterlei
Sympathisant
- webserver
0 hotti0 Sympathisant0 hotti
0 ChrisB
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
hi,
Mein AccessLog sagt:
127.0.0.1 - - [18/Jun/2009:19:37:06 +0800] "GET /example/main.css HTTP/1.1" 404 1118Laut 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
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
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
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