Laravel中如何为指定图片设置Cache-Control缓存控制头
解决方法
首先按顺序排查以下配置:
- 确认Apache已启用
mod_headers模块:可通过phpinfo()查看已加载模块列表,找到mod_headers即为开启;未开启的话需要在Apache配置文件中取消LoadModule headers_module modules/mod_headers.so行的注释,重启Apache生效。 - 确认站点目录的
AllowOverride配置已开启:打开Apache的站点配置文件(通常是httpd.conf或虚拟主机对应的.conf文件),找到站点对应的<Directory>配置段,确认参数为AllowOverride All,如果为AllowOverride None,.htaccess文件会完全不生效,修改后需重启Apache。 - 确认.htaccess文件放在静态资源所在的目录:Laravel项目默认静态资源都存放在
public目录下,需要把配置规则写在public目录的.htaccess文件中,如果放在项目根目录会无法匹配到资源。
上述配置确认无误后,调整.htaccess规则写法,用Header always set代替Header set,避免部分响应场景下规则不生效:
<Files "background.png"> Header always set Cache-Control "max-age=300, private" </Files>
如果还是不生效,可改用路径匹配的写法精准命中资源:
<IfModule mod_headers.c> <FilesMatch "img/background\.png$"> Header always set Cache-Control "max-age=300, private" </FilesMatch> </IfModule>
测试前请先清除浏览器本地缓存,修改.htaccess不需要重启Apache,直接通过浏览器开发者工具的网络面板查看资源的响应头即可。
内容的提问来源于stack exchange,提问作者BenA
相关产品推荐
相关产品推荐

