我会提供两种不同的方式来服务图片:
对于PHP脚本,我只需要在响应中添加一个“
对于直接访问,我使用HTACCESS,但迄今为止我看到的每个规则都不能像我的PHP脚本那样进行检查(检查文件是否已更改,然后提供304或文件本身)。
这是我计划使用的HTACCESS规则:
据我所知,更新缓存图像的唯一方法是将其重新命名。是否有绕过此问题的方法?例如,通过检查图像的最后修改日期?
- 例如,对于个人资料照片,我使用PHP脚本
- 对于图标和背景等,直接指向它们
对于PHP脚本,我只需要在响应中添加一个“
Last-Modified
”头,并在再次调用时传递一个“304状态码
”,如果文件没有更改(使用filemtime()
)。对于直接访问,我使用HTACCESS,但迄今为止我看到的每个规则都不能像我的PHP脚本那样进行检查(检查文件是否已更改,然后提供304或文件本身)。
这是我计划使用的HTACCESS规则:
Header unset Pragma
FileETag None
Header unset ETag
# cache images/pdf docs for 10 days
<FilesMatch "\.(ico|pdf|jpg|jpeg|png|gif)$">
Header set Cache-Control "max-age=864000, public, must-revalidate"
Header unset Last-Modified
</FilesMatch>
据我所知,更新缓存图像的唯一方法是将其重新命名。是否有绕过此问题的方法?例如,通过检查图像的最后修改日期?
/images/sample.jpg?v=2
的形式。您可以使用一些重写规则来创建更美观的URL,例如/images/v2/sample.jpg
。但是,如果图像没有更改,您必须小心不要更改URL,因为新的URL将无法与304一起使用。 - Gerben