如何让Apache缓存指定目录下无扩展名的JPG文件(不修改文件)
解决方案:Apache为特定目录下无扩展名JPG文件设置缓存
当然有完美的解决方案!不用修改文件名、不用调整引用路径,咱们可以通过Apache的指令组合实现精准缓存控制,只针对目标文件生效,其他文件不受影响。
核心思路
- 先让Apache识别这些无扩展名文件的真实MIME类型(
image/jpeg) - 针对这些文件单独配置缓存规则,限定在目标目录内
具体配置方案
你可以选择在Apache主配置文件的<Directory>块中配置,或者在目标目录下创建.htaccess文件(需要确保目录的AllowOverride权限允许FileInfo和Headers指令)。
方案1:精准匹配指定文件名(推荐)
如果你的无扩展名JPG文件名是固定的(比如service-icon、service-medal),直接精确匹配这些文件名,避免误匹配其他无扩展名文件:
<Directory "/path/to/your/target/directory"> # 匹配指定的无扩展名文件 <FilesMatch ^(service-icon|service-medal)$> # 强制设置MIME类型为JPG ForceType image/jpeg # 开启缓存并设置过期时间(示例为30天) ExpiresActive On ExpiresDefault "access plus 30 days" # 同时设置Cache-Control头(可选,增强兼容性) Header set Cache-Control "public, max-age=2592000" </FilesMatch> </Directory>
方案2:匹配所有无扩展名文件(如果目录内无扩展名文件都是JPG)
如果目标目录里所有无扩展名文件都是JPG,可以用更通用的匹配规则:
<Directory "/path/to/your/target/directory"> # 匹配没有扩展名的文件(文件名中不含.) <FilesMatch ^[^.]+$> ForceType image/jpeg ExpiresActive On ExpiresDefault "access plus 30 days" Header set Cache-Control "public, max-age=2592000" </FilesMatch> </Directory>
关键说明
ForceType指令:让Apache将这些无扩展名文件以image/jpeg类型响应,解决MIME类型识别问题,同时也能让缓存规则正常生效FilesMatch的正则表达式:^(service-icon|service-medal)$精确匹配指定文件名;^[^.]+$匹配任何不含.的文件名- 缓存时间可以根据需求调整:
max-age=2592000是30天的秒数(302460*60),也可以用ExpiresDefault的其他格式比如"modification plus 1 month"
内容的提问来源于stack exchange,提问作者Hamid Salari
相关产品推荐
相关产品推荐

