如何在.htaccess中为指定目录及子目录非PDF文件设置10小时过期头?
指定目录(排除PDF文件)设置10小时过期头的.htaccess实现方法
由于.htaccess文件本身就作用于其所在目录及所有子目录,因此不需要使用<Directory>指令,直接将配置文件放在目标/foldername目录下即可。以下是两种可行的实现方案:
方案一:使用mod_expires + FilesMatch(推荐)
通过FilesMatch匹配规则区分PDF与其他文件,精准设置过期策略:
<IfModule mod_expires.c> ExpiresActive On # 对所有非PDF文件设置10小时过期时间 <FilesMatch "(?<!\.pdf)$"> ExpiresDefault "access plus 10 hours" </FilesMatch> # 单独设置PDF文件的过期规则(示例为不缓存,可按需调整) <FilesMatch "\.pdf$"> ExpiresDefault "access plus 0 seconds" </FilesMatch> </IfModule>
- 规则说明:
(?<!\.pdf)$是负向后行断言,匹配所有不以.pdf结尾的文件; - 前提:服务器需启用
mod_expires模块。
方案二:使用mod_rewrite + mod_headers
如果mod_expires模块无法启用,可通过重写规则设置Cache-Control头(与Expires头效果等效):
<IfModule mod_rewrite.c> RewriteEngine On # 匹配非PDF文件,设置环境变量传递缓存时长(36000秒=10小时) RewriteCond %{REQUEST_URI} !\.pdf$ [NC] RewriteRule ^ - [E=CACHE_DURATION:max-age=36000] </IfModule> <IfModule mod_headers.c> # 将环境变量中的缓存规则应用到响应头 Header set Cache-Control "%{CACHE_DURATION}e" env=CACHE_DURATION </IfModule>
- 规则说明:
[NC]表示忽略大小写匹配; - 前提:服务器需启用
mod_rewrite和mod_headers模块。
注意事项
- 可通过
phpinfo()或服务器配置面板确认所需模块是否已启用; - 若需对特定类型文件(如图片、CSS)设置不同过期规则,可替换
ExpiresDefault为ExpiresByType(如ExpiresByType image/jpeg "access plus 10 hours")。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

