静态内容来自子域

时间:2016-02-27 12:07:48

标签: php apache .htaccess

我有 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中查了一下

image of network is here

并且所有内容都是从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请求。如何摆脱第一次不必要的请求?

1 个答案:

答案 0 :(得分:0)

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

如果您按原样保留HTML,浏览器将从domain.localhost请求文件,接收&#34; 302 Found&#34;来自Apache(在.htaccess中定义),然后再次从assets.domain.localhost请求文件。

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