繁体   English   中英

Apache:在.htaccess中为目录设置max-age或expires

[英]Apache: set max-age or expires in .htaccess for directory

我有一些内容永远不会改变的目录。

是否可以创建.htaccess文件,告诉浏览器该目录和子目录中的任何内容都可以缓存很长时间?

如果可能的话,我想在每个目录中复制相同的.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 - Not Modified并将max-age重置为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

这将:

  1. 将max-age设置为1年(推荐最长)
  2. 发送1年的过期标签
  3. 发送Etag,1年后浏览器将执行etag验证
  4. 让中间缓存设备/服务知道他们可以将文件缓存1年。

仅供参考,如果您执行上述操作并且您的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中的这一行:

#LoadModule expires_module modules/mod_expires.so

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM