我想根据访问的路径文件有条件地设置缓存头。基本上,访问http://www.example.com/cache/$cache_key/*
应该为将来缓存标头中的文件提供远程服务。
我正在使用重写规则来设置环境变量,然后尝试根据该变量设置缓存控制标头。但是,看起来这个变量在这个过程中设置的时间太晚了;条件标头规则永远不会被执行。
RewriteRule ^cache/.*?/(.*) /$1 [env=asset:true,L]
Header set Cache-control "max-age=30"
Header set Cache-Control "max-age=31536000" env=asset
Header unset ETag env=asset
有更好的方法吗?我尝试了一些目录和位置块的组合但没有成功。
答案 0 :(得分:20)
使用phpinfo()
我确定环境变量最终没有在重写的请求上设置,所以问题不在于请求的顺序,而是它似乎将变量抛出。使用查询字符串而不是URL并且不重写似乎是我能够实现这一目标的唯一方法。我同意,似乎应该是更好的方式。
RewriteCond %{QUERY_STRING} longcache=true(&|$)
RewriteRule .* - [ENV=LONGCACHE:true,L]
Header set Cache-Control "max-age=30" env=!LONGCACHE
Header set Cache-Control "max-age=31536000" env=LONGCACHE
开启眼睛获得更多不同的答案:
重定向后,您的asset
环境变量会重命名为REDIRECT_asset
,因此您的条件标头指令必须为:
Header set Cache-Control "max-age=31536000" env=REDIRECT_asset