如何通过.htaccess为Yii缓存文件设置过期标头
给Yii 1.1.16缓存文件配置.htaccess过期标头
嘿,针对你在Yii 1.1.16网站上想给缓存文件设置过期标头的需求,我来梳理下具体的.htaccess配置方案——先得明确Yii里两类常见的缓存相关文件位置,再分别配置:
1. 处理Yii文件缓存(CFileCache)的本地缓存文件
默认情况下,Yii的文件缓存(比如页面缓存、数据缓存的本地文件)存在protected/runtime/cache/目录下(如果你的缓存路径有自定义配置,记得对应调整)。这类文件属于临时缓存,没必要设太长的过期时间,以下是配置示例:
把这段代码加到你现有的.htaccess过期配置后面:
# 针对Yii runtime缓存目录的文件 <Directory "/path/to/your/site/protected/runtime/cache"> <IfModule mod_expires.c> ExpiresActive On # 这里设为1小时,你可以根据自己的缓存策略调整时长 ExpiresDefault "access plus 1 hour" </IfModule> # 加个备选方案,防止mod_expires没启用 <IfModule mod_headers.c> Header set Cache-Control "max-age=3600, public" </IfModule> </Directory>
注意:把/path/to/your/site/替换成你网站的实际根目录路径。如果你的Apache配置限制了.htaccess里用<Directory>指令(比如AllowOverride权限不够),可以换成下面的替代写法:
<IfModule mod_expires.c> # 匹配protected/runtime/cache下的所有文件 <FilesMatch "^protected/runtime/cache/.+$"> ExpiresActive On ExpiresDefault "access plus 1 hour" </FilesMatch> </IfModule>
2. 处理Yii AssetManager发布的静态资源(assets目录)
如果你说的“缓存文件”也包含Yii自动发布到assets/目录的前端资源(比如JS、CSS、图片),这类资源因为有哈希后缀,更新时文件名会自动变化,所以可以设较长的过期时间:
# 针对Yii assets目录的静态资源 <Directory "/path/to/your/site/assets"> <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" </IfModule> <IfModule mod_headers.c> # 给哈希命名的资源加immutable标记,提升浏览器缓存效率 Header set Cache-Control "max-age=31536000, public, immutable" </IfModule> </Directory>
几个要注意的点
- 先确认你的Apache已经启用了
mod_expires和mod_headers模块,可以用httpd -M命令(服务器端)或者浏览器开发者工具的Network标签(看响应头有没有Expires/Cache-Control字段)来验证。 - 如果用的是Yii的内存缓存组件(比如APC、Memcache),这些的过期时间是在Yii的配置文件里设置的,不需要通过.htaccess处理。
- 配置完后记得测试:打开浏览器开发者工具,访问对应文件,查看响应头里的
Expires和Cache-Control是否符合你的设置。
内容的提问来源于stack exchange,提问作者Vikas Sharma
相关产品推荐
相关产品推荐

