2016-02-27 65 views
0

我有domain.localhostassets.domain.localhost。 htppd.conf中的虚拟主机设置正确。静态内容从子域服务

我有根“公共/”文件夹,也有像图片,脚本,样式其他文件夹。我需要从assets.domain.localhost提供来自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] 

第一个问题:是它separatly加载资产和域降低的要求数正确的方法?

第二个问题:我检查的萤火

image of network is here

,一切都从assets.domain.localhost加载,但CSS和JS被加载两次。第一次从domain.localhost与302代码(只是一些字节,但它是请求),而不是从具有304代码的assets.domain.localhost。我做错了什么?

更新

此变通方法增加导致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被缓存。如何摆脱第一个不必要的要求?

回答

0

您必须确保您更改HTML以包含assets.domain.localhost域的资产URL。

如果您保持HTML原样,浏览器将向domain.localhost请求文件,从Apache接收“302 Found”(如在.htaccess中定义的),然后从assets.domain.localhost再次。

如果无法更改HTML中的资产链接,您可以尝试使用类似mod_substitute的内容来替换即时链接。但是我从来没有在真实世界中尝试过这种情况。

+0

我不改变我的html。我绝对不想要地址图片等。我的想法是让图像,js,css的相对路径,但在从assets.domain.localhost加载htaccess集。有可能的?合乎逻辑的是你在第二段中写的,但为什么这种行为只在js和css中,并且图像是从aset子域直接加载的? – tomasr

+0

它应该像CDN一样。像CSS一样修复相同的行为,js有jpegs,png没有 – tomasr