【问题标题】:Conditionally setting cache headers in apache有条件地在 apache 中设置缓存头
【发布时间】:2011-12-10 09:01:24
【问题描述】:

我想根据访问的路径文件有条件地设置缓存头。基本上,访问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

有没有更好的方法来做到这一点?我尝试了几种 Directory 和 Location 块的组合,但均未成功。

【问题讨论】:

    标签: apache caching mod-rewrite mod-headers


    【解决方案1】:

    使用phpinfo() 我确定环境变量最终没有在重写请求上设置,所以问题不在于请求的顺序,而是它似乎将变量扔掉了。使用查询字符串而不是 URL 和 not 重写似乎是我可以让它工作的唯一方法。我同意,似乎应该有更好的方法。

    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 指令需要:

    Header set Cache-Control "max-age=31536000" env=REDIRECT_asset
    

    【讨论】:

    • 谢谢,不知怎的,我错过了这个答案。
    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2014-01-04
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    相关资源
    最近更新 更多