什么是正确的到期caching控制的正确的Apache语法?

关于dynamic和静态高速caching的绝对优化使用的一些问题。

目前,我的htaccess设置如下,我觉得我没有真正使用它的正确方式…你的任何改善build议我看到的答案! 非常感激!

问题1:关于我应该改变什么的build议,为了使caching更加正确在两个级别(#### dynamic / #### static)

问题2:这些IF标记是做什么的: <IfModule mod_headers.c> ... </IfModule>
保持还是不合理? 没有它似乎也工作。 使用这个有速度优势吗?

问题3:我应该同时使用ExpiresDefault M7200Header set Cache-Control "max-age=7200"还是两者之一?


 <IfModule mod_headers.c> ExpiresActive On Header unset ETag FileETag None Header unset Pragma ExpiresDefault M14515200 ##### DYNAMIC PAGES <FilesMatch "\\.(htm|php)$"> ExpiresDefault M7200 Header set Cache-Control "max-age=7200" </FilesMatch> ##### STATIC FILES <FilesMatch "\\.(ico|jpg|png|gif|svg|swf|css|js|fon|ttf|eot|xml|pdf|flv)$"> ExpiresDefault M14515200 Header set Cache-Control "max-age=14515200" </FilesMatch> </IfModule> 

要首先回答问题2,那么<IfModule>包装器就是这样的,所以你的configuration在一个不包含mod_headers的Apache实例上仍然可以工作(尽pipe没有设置头部的位)。 没有包装,没有mod_headers的Apache实例在启动时会失败。

对于问题3,Web服务器设置Expires和Cache-Control标题,因为caching标题的历史很长并且混乱,并且覆盖这两个标题是让尽可能多的最终用户尊重caching生命周期的最佳select。 99%的时间,其中任何一个都足够了(在这种情况下,您最好使用最大年龄,并将CPU工作负载从现在起确定为7200分钟,而不是用户的浏览器,而不是服务器)。

对于问题1,如果你的.htm和.php页面是真正dynamic的(内容取决于用户是谁或者他们在做什么),那么你不应该让他们被caching。 .xml文件通常是由您的代码生成的,如果是的话,那么他们应该被包含在dynamic而不是静态的内容中。 如果你已经采取措施确保它们是静态的,并且永远不能改变文件的内容而保持相同的文件名,那么只给予你的“静态”文件这么长的一生。 特别是,如果您更改JavaScript或CSS文件,则用户将看到意外的结果,具体取决于caching的内容和不包含的内容。