有条件地在apache中设置缓存头

mik*_*ike 12 apache mod-rewrite caching mod-headers

我想根据访问的路径文件有条件地设置缓存头.基本上,访问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
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?我尝试了目录和位置块的几种组合但没有成功.

Kev*_*ker 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
Run Code Online (Sandbox Code Playgroud)

打开眼睛获得更多不同的答案:

您的asset环境变量REDIRECT_asset在重定向后重命名为,因此您的条件Header指令必须是:

Header set Cache-Control "max-age=31536000" env=REDIRECT_asset
Run Code Online (Sandbox Code Playgroud)