Ich verwende .htaccess, um eine Website mit den folgenden Weiterleitungen zu beschleunigen:
request for http://example.com/images/name.jpg routed to http://i.example.com/name.jpg
request for http://example.com/css/name.css routed to http://c.example.com/name.css
Im Stack Overflow-Podcast habe ich erfahren, dass dies eine Website schneller machen kann, da der Browser kann mehrere Dateien gleichzeitig herunterladen (anscheinend zwei Ströme pro Bereich, obwohl dies nicht bestätigt ist).
Der Unterschied ist in der Tat dramatisch; die Seite lädt etwa fünfmal so schnell ¡!
Ich habe die Originalordner und -bilder nicht angefasst - ich verwende nur mod_rewrite, um die Adressen von beispiel.com/bilder/ a i.example.com/ :
rewritecond %{HTTP\_HOST} !^i\\.example\\.com \[NC\]
rewriterule ^images/(\[^/\]+)$ http://i.example.com/$1 \[L\]
rewritecond %{HTTP\_HOST} !^c\\.example\\.com \[NC\]
rewriterule ^css/(\[^/\]+)$ http://c.example.com/$1 \[L\]
Das Problem, das ich habe, ist, dass diese Technik perfekt für Bild-Tags funktioniert, die in HTML enthalten sind, aber nicht für Bilder, die über Stylesheets enthalten sind:
img src=/bilder/logo.jpg funktioniert perfekt
Hintergrund:url(/images/logo.jpg); funktioniert nicht
Das Server-Fehlerprotokoll enthält den folgenden Eintrag:
Die Datei existiert nicht: /var/www/html/css/images, referer: http://example.com/page.html
Dies scheint darauf hinzudeuten, dass die Rewrite-Regel nicht korrekt angewendet wird.
Die Stylesheets funktionieren, wenn ich verwende:
Hintergrund:url( http://i.example.com/logo.jpg );
Um jedoch zu vermeiden, dass alle Formatvorlagen neu geschrieben werden, würde ich das gerne wissen: warum gilt url rewriting nicht für Stylesheets wie für html img tags .
[update1] Dieses Problem besteht in Safari 4 Beta, Firefox 3.0.3 und Chrome, aber die Die Seite funktioniert perfekt im IE6 .
[update2] Die Hinzufügung von [L,R=301] und [L,R=302] hat nicht geholfen.
[update3] Auf der Grundlage von Gumbos Vorschlag habe ich Folgendes ausprobiert:
Externe Umleitung, wenn der Pfad nicht mit dem Hostnamen übereinstimmt:
rewritecond %{HTTP_HOST} !^i\.domain\.com$
rewriterule ^images/([^/]+)$ http://i.domain.com/$1 [L,R=301]
rewritecond %{HTTP_HOST} !^c\.domain\.com$
rewriterule ^css/([^/]+)$ http://c.domain.com/$1 [L,R=301]
Leiten Sie intern um; wenn es einen unnötigen Ordnernamen gibt, entfernen Sie ihn (siehe Serverfehler oben):
rewritecond %{HTTP_HOST} ^i\.domain\.com$
rewriterule ^images/([^/]+)$ $1 [L]
rewritecond %{HTTP_HOST} ^c\.domain\.com$
rewriterule ^css/([^/]+)$ $1 [L]
Es hat trotzdem nicht geklappt. Bizarrerweise ist der Server-Fehler:
Die Datei existiert nicht: /var/www/html/css/var, Referer: http://domain.com/page.html