创建一个很好的.htaccess文件,可以很好地处理共享资源

时间:2012-02-18 14:20:11

标签: .htaccess caching proxy compression

我正在尝试创建一个理想的.htaccess文件,该文件将勾选所有方框以利用服务器压缩,但仅限于有意义的地方,以及在公共代理上缓存资源,再次在有意义的地方。我一直在摸索着这个过程,我觉得我几乎都在那里,但我怀疑可能还有一些蠢事,我想我会邀请建议。我怀疑它还没有,因为我发现了一个很棒的工具,我必须先和你分享。

www.pingdom.com有一套很棒的网站分析工具,其中很多都是免费使用的,我个人认为最好的是http://tools.pingdom.com/fpt/。这会向您显示网页每个元素的加载时间,但更重要的是,根据它的性能等级'标签显示事情可能更好的细分。现在我使用了Google(和其他人)提供的大量JQuery资源,我知道这些资源应该存在于许多代理服务器上。我不确定如何在我的.htaccess文件中说(虽然我已经尝试过),果然,Pingdom的anaylsis包含以下feedack:

  

以下可公开缓存的可压缩资源应具有   "变化:接受编码"头:

     

•HTTP://jmar777.googlecode.com/svn/trunk/js/jquery.easing.1.3.js

     

•HTTP://kwicks.googlecode.com/svn/branches/v1.5.1/Kwicks/jquery.kwicks-1.5.1.pack.js

嗯,我以为我已经做到了,但话又说回来,或许它取决于那些实际上用这些资源来设置这些标题的服务器,也许我无能为力它?是这样吗?无论如何这里是我的.htaccess文件。请注意我的缓存设置非常低,因为我仍在尝试/学习它。在我开始使用之前,我会对此进行调整。

suPHP_ConfigPath /home/mydomain/public_html
<Files php.ini>
order allow,deny
deny from all
</Files>

<ifModule mod_deflate.c>
<filesMatch "\.(js|css|php|htm|html)$">
SetOutputFilter DEFLATE
</filesMatch>
</ifModule>

# 1 HOUR
<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|htm|html|)$">
Header set Cache-Control "max-age=3600, public"
</filesMatch>

# PHP - NO CACHING WANTED DUE TO USING SESSION COOKIES
<filesMatch "\.(php)$">
Header set Cache-Control "private"
</filesMatch>

# STORE BOTH COMPRESSED AND UNCOMPRESSED FILES FOR JS & CSS
<IfModule mod_headers.c>
  <FilesMatch "\.(js|css|xml|gz)$">
    Header append Vary Accept-Encoding
  </FilesMatch>
</IfModule>

你可以看到我正在努力做一个“不同的接受编码”&#39;在文件的末尾,但不确定这是否是所需要的。我如何告诉客户端访问JQuery之类的代理,这些文件无疑存储在其中,还有什么我可以做的,以使我的.htaccess文件提供更快的速度和我的搜索引擎友好的内容?

感谢您的想法。

编辑:

看来我的问题不够明确,所以这里有一些澄清:

1)在Google上托管的JQuery库,其代理可用性在某种程度上受我的.htaccess设置的控制,因为我在我的PHP中进行远程引用,如果是这样,我应该如何说,我的.htaccess文件,&#39;请将该库缓存在代理中一年左右&#39 ;?

2)我应该如何指定Google托管文件应该通过“Vary Accept-Encoding&#39;”提供压缩和解压缩?我猜这两个问题都是谷歌控制而不是我的,所以要做到绝对明确......

3)压缩选择和文件的代理是像我控制下的JQuery库还是在(在这种情况下)Googles?

4)一般来说,我的.htaccess文件中的任何内容都以次优(long winded)方式表示,我怎样才能缩短/压缩它?

5).htaccess文件中的任何内容都以可能导致问题的方式排序 - 例如我在三个单独的规则下引用CSS - 顺序是否重要?

(编辑完结后)。

1 个答案:

答案 0 :(得分:-1)

  

是jQuery库,谷歌在的东西,其代理的可用性是莫名其妙的我的.htaccess设置的控制下举办的,因为我在做我的PHP远程引用它,如果是这样,怎么说呢,在我的。 htaccess文件,'请在代理中缓存该库一年左右'?

这个断言是不正确的。浏览器决定是否缓存,下载与否,具体取决于 请求的标头交换。因此,如果查询响应涉及对多站点的请求,那么您的.htaccess文件只会影响它对文件进行缓存的方式。它如何缓存谷歌是由谷歌决定。例如,对http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js的请求收到响应标头:

Age:133810
Cache-Control:public, max-age=31536000
Date:Fri, 17 Feb 2012 21:52:27 GMT
Expires:Sat, 16 Feb 2013 21:52:27 GMT
Last-Modified:Wed, 23 Nov 2011 21:10:59 GMT

浏览器通常会缓存一年,但可能会决定在重用时重新验证:

If-Modified-Since:Wed, 23 Nov 2011 21:10:59 GMT

在这种情况下, ajax.googleapis.com 会回复301和以下标题:

Age:133976
Date:Fri, 17 Feb 2012 21:52:27 GMT
Expires:Sat, 16 Feb 2013 21:52:27 GMT

这个简短的请求/响应对话通常需要约50毫秒,因为此内容是CDN传送的。

你可能希望以这种方式修改你的其他补充Q,因为有些不适用