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

创建一个能很好地处理共享资源的.htaccess文件,.htaccess,caching,proxy,compression,.htaccess,Caching,Proxy,Compression,我正在尝试创建一个理想的.htaccess文件,它将勾选所有利用服务器压缩的框,但仅在有意义的地方,并在公共代理上缓存资源,同样在有意义的地方。我一直在摸索这个过程,我想我已经差不多做到了,但我怀疑可能还有一些技巧需要做,我想我会征求一些建议。我怀疑它还没有出现,因为我发现了一个很棒的工具,我必须首先与大家分享 有一套很棒的网站分析工具,其中很多都是免费使用的,我个人认为最好的是。这显示了页面中每个元素的加载时间,但更重要的是,在“性能等级”选项卡下,它提供了可以更好的地方的细分。现在我使用了谷

我正在尝试创建一个理想的.htaccess文件,它将勾选所有利用服务器压缩的框,但仅在有意义的地方,并在公共代理上缓存资源,同样在有意义的地方。我一直在摸索这个过程,我想我已经差不多做到了,但我怀疑可能还有一些技巧需要做,我想我会征求一些建议。我怀疑它还没有出现,因为我发现了一个很棒的工具,我必须首先与大家分享

有一套很棒的网站分析工具,其中很多都是免费使用的,我个人认为最好的是。这显示了页面中每个元素的加载时间,但更重要的是,在“性能等级”选项卡下,它提供了可以更好的地方的细分。现在我使用了谷歌(和其他公司)提供的许多JQuery资源,我知道这些资源应该存在于许多代理服务器上。我不知道如何在我的.htaccess文件中这样说(尽管我已经尝试过),果然,Pingdom的分析包括以下反馈:

以下可公开缓存、可压缩的资源应具有 “更改:接受编码”标题:

•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>
suPHP\u ConfigPath/home/mydomain/public\u html
命令允许,拒绝
全盘否定
SetOutputFilter放气
#1小时
标题集缓存控制“最大年龄=3600,公共”
#PHP-由于使用会话cookie,不需要缓存
标头集缓存控制“专用”
#存储JS和CSS的压缩和未压缩文件
头附加变量接受编码
您可以看到,我正在尝试在文件末尾执行“Vary Accept Encoding”,但不确定这是否是需要的。我如何告诉客户端访问JQuery等这些文件无疑存储在的代理,还有什么我可以做的,以使我的.htaccess文件提供更快和我的搜索引擎友好的内容

谢谢你的想法

编辑:

我在这里提出的问题似乎不够清楚,因此,这里有一些澄清:

1) 托管在Google上的JQuery库的代理可用性是否在某种程度上受我的.htaccess设置的控制,因为我在PHP中远程引用它,如果是,我应该如何在.htaccess文件中说“请将该库缓存在代理中一年左右”

2) 我应该如何指定Google托管的文件应该通过“Vary Accept Encoding”进行压缩和解压缩?我猜这两个问题都在谷歌的控制之下,而不是我的控制之下,所以要说得非常清楚

3) 像JQuery库这样的文件的压缩选择和代理是在我的控制下还是在(本例中)谷歌的控制下

4) 通常,我的.htaccess文件中的任何内容都是以次优(冗长)的方式表示的,我如何缩短/压缩它

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

(编辑结束)

托管在Google上的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交付的


您可能希望从这个角度重新编写您的其他补充Qs,因为有些Qs不适用

不确定您为什么主修商业产品广告。有一些主要的FLOSS工具基本上完成了相同的工作,比如google pagespeed扩展。嗯,这篇文章是在博客上写的,不是在博客上写的。牙线是用来清洁牙齿的东西。为什么你认为其他人都像你一样了解计算机?你的傲慢令人震惊,因为你一直在为我的问题打分数。我猜你只是看不起那些没有像你那样受过教育的人。那你居然敢说你的“卑微”意见?!!顺便说一句,我高度评价了那个网站,因为它值得。Stack Overflow也是一种“商业产品”,或者您认为所有者对您有帮助吗?提到伟大的产品是没有理由责难的。如果你不能回答我的问题,闭嘴。也许我解释得不好。是的,我记下你的分数并不是因为对你有任何看法——我怎么能做到这一点呢?但是因为我对你的文章的评价,这不是一个具体的问题,而是一篇关于优化
.htaccess
的文章