我有一些内容永远不会改变的目录。
是否有可能创build.htaccess文件告诉浏览器该目录和子目录中的任何内容都可以caching很长时间?
如果可能,我想在每个目录中复制相同的.htaccess文件。
如果这是可能的,你会推荐max-age过期或两者?
所以它看起来可能…. .htaccess文件的语法是:
Header unset Last-Modified FileETag none ExpiresActive On ExpiresDefault "access plus 1 years"
这将关闭Etags并打开缓存控制:max-age
然后把这个.htaccess文件放到目录中,所有的文件(包括它的子目录都会被缓存1年。
我决定将所有可缓存的内容放在单个根目录下,并编辑httpd.conf
<Directory "C:\somedir\cache"> Header unset Last-Modified FileETag none ExpiresActive On ExpiresDefault "access plus 1 years" </Directory>
我仍然在测试这个过程。 我只是希望这不会关闭网站其余部分的Etags。 到目前为止,它看起来像按计划运行。
更新(6个月后):
设置ExpiresDefault并允许电子标签是最好的事情。
在httpd.conf中:
<Directory "C:\somedir\cache"> ExpiresActive On ExpiresDefault "access plus 1 year" </Directory>
确保“somedir”位于Apache根目录(如htdocs)内。
允许电子标签是一件好事,因为1年后,浏览器将通过传递电子标签来重新验证文件。 Web服务器将发送一个304 – 未修改,并将最大年龄重置为1年。 这非常有效。
总而言之,您可以观看apache日志文件,并查看/ cache目录中的项目是否开始提供一次。
注意:我发现如果你愿意的话,设置Header append Cache-Control "public"
是可以的。
最终版本:
这是最终版本:(只需在httd.conf的底部添加)
<Directory "C:\somedir\cache""> ExpiresActive On ExpiresDefault "access plus 1 year" Header append Cache-Control "public" </Directory>
检查标题应该显示这一点:
Accept-Ranges:bytes Cache-Control:max-age=31536000, public Connection:Keep-Alive Content-Language:en Content-Length:746 Content-Type:text/css Date:Thu, 29 May 2014 15:23:50 GMT ETag:"240000000add63-2ea-4f4086d72ad01" Expires:Fri, 29 May 2015 15:23:50 GMT Keep-Alive:timeout=40, max=200 Last-Modified:Fri, 07 Mar 2014 18:28:59 GMT
这会:
仅供参考,如果你做了上面提到的,你的Apache不会重新启动,那么你可能会得到这个错误:
The Apache service named reported the following error: >>> Invalid command 'ExpiresActive', perhaps misspelled or defined by a module not included in the server configuration.
你可以通过点击“开始”找到该错误,输入“计算机管理”,启动它,在树上打开“事件查看器 – > Windows日志 – >应用程序”。 这是我发现上面的错误。
简单的修复,只需在httpd.conf中取消注释:
#Loadmodulee expires_module modules/mod_expires.so