我正在使用 .htaccess 通过以下重定向加速网站:
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
通过收听 Stack Overflow 播客,我了解到这可以使站点更快,因为浏览器可以同时下载更多文件(显然每个域有两个流,尽管这未经证实)。
确实,差异是巨大的。页面加载速度大约是原来的五倍!
我没有触及原始文件夹和图像——我只是使用 mod_rewrite 将地址从example.com/images/更改为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] 重写 ^css/([^/]+)$ http://c.example.com/$1 [L]
我遇到的问题是,这种技术非常适用于 html 中包含的图像标签,但不适用于通过样式表包含的图像:
img src=/images/logo.jpg完美运行
背景:网址(/images/logo.jpg);不工作
服务器错误日志包含以下条目:
文件不存在:/var/www/html/css/images,引用者:http ://example.com/page.html
这似乎意味着重写规则的应用不正确。
如果我使用样式表工作:
背景:网址(http://i.example.com/logo.jpg);
但是,为了避免重写所有样式表,我想知道:为什么 url 重写不像 html img 标签那样适用于样式表。
[update1] Safari 4 Beta、Firefox 3.0.3 和 Chrome 中存在此问题,但该页面在 IE6 中完美运行。
[update2]添加 [L,R=301] 和 [L,R=302] 没有帮助。
[update3]我根据 Gumbo 的以下建议尝试了以下方法:
如果路径与主机名不匹配,则在外部重定向:
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]
内部重定向;如果有不必要的文件夹名称,请将其删除(请参阅上面的服务器错误):
rewritecond %{HTTP_HOST} ^i\.domain\.com$
rewriterule ^images/([^/]+)$ $1 [L]
rewritecond %{HTTP_HOST} ^c\.domain\.com$
rewriterule ^css/([^/]+)$ $1 [L]
它仍然没有工作。奇怪的是,服务器错误是:
文件不存在:/var/www/html/css/var,引用者: http: //domain.com/page.html