我有 domain.localhost 和 assets.domain.localhost 。 htppd.conf中的虚拟主机设置正确。
我在root “public /”中有文件夹,还有其他文件夹,例如图片,脚本,样式。我需要来自domains.localhost的服务内容以及来自assets.domain.localhost的静态图像,脚本和样式服务器。
我在htaccess中有这段代码:
RewriteEngine On
RewriteCond %{HTTP_HOST} !assets\.domain\.localhost
RewriteCond %{REQUEST_URI} \.(png|gif|ico|css|js)$ [NC]
RewriteRule ^(.*) http://assets.domain.localhost/$1 [L]
第一个问题:分离加载资产和减少域名请求的正确方法是什么?
第二个问题:我在firebug中查了一下
并且所有内容都是从assets.domain.localhost加载的,但是css和js加载了两次。第一次来自domain.localhost的302代码(只是一些字节,但它是请求),而不是来自assets.domain.localhost的304代码。我做错了什么?
更新
此解决方法会增加PageSpeed Insights的结果,但会减少网页性能测试。第二个是来自服务器的响应更长,资产不再是缓存。我在htaccess中有这个:
Header set Cache-Control "max-age=604800, public, must-revalidate"
<IfModule deflate_module>
<IfModule filter_module>
AddOutputFilterByType DEFLATE application/rdf+xml application/rss+xml application/atom+xml image/svg+xml
AddOutputFilterByType DEFLATE text/css text/javascript application/javascript application/x-javascript
</IfModule>
</IfModule>
在更改之前,它有效,而不是缓存不起作用。
UPDATE2
好的问题是第一次请求 domain.localhost ,没有缓存,缓存了对 assets.domain.localhost 的secon请求。如何摆脱第一次不必要的请求?
答案 0 :(得分:0)
您必须确保更改HTML以包含assets.domain.localhost域的资产网址。
如果您按原样保留HTML,浏览器将从domain.localhost请求文件,接收&#34; 302 Found&#34;来自Apache(在.htaccess中定义),然后再次从assets.domain.localhost请求文件。
如果无法更改HTML中的资产链接,您可以尝试使用mod_substitute之类的内容来替换即时链接。但我从来没有在现实世界中尝试过这种情况。