ExpiresByType
对根据Header set Content-Type
规则设置其模仿类型的资产没有影响。
配置:
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
Order allow,deny
allow from all
allowoverride none
<FilesMatch "health$">
Header set Content-Type "application/json"
</FilesMatch>
# enable expirations:
ExpiresActive On
ExpiresDefault "access plus 1 year"
# expire json after shorter time:
ExpiresByType application/json "access plus 1 minute"
</Directory>
所有json文件(扩展名)都获得了适当的Cache-Control: max-age=60
标头集,但与health$
匹配的所有文件都将接收默认的年份(31536000
)值。我希望这些文件的过期时间也为1分钟,因为以前的规则将其内容类型设置为json。
看起来配置中有些竞争,即到期规则在标头设置之前执行。
答案 0 :(得分:1)
这里没有竞赛,甚至没有任何不确定的顺序,到期的东西将始终在“ Header set”之前运行,因为执行此工作的模块如何向Apache核心注册。
要记住有助于在Apache中进行这类调查的一件事是,配置在启动时被读取并存储在相应的模块中,稍后将在请求处理期间调用该配置。换句话说,在配置文件中对来自不同模块的指令进行排序通常是没有意义的。有意义的是,在请求处理过程中,模块何时生效,查询其配置并进行更改。
在生成响应后,mod_headers和mod_expires都可以让您要求他们相对较晚地完成工作。为什么?因为它们都相对于其他响应头进行了更改。
如果这里的问题是如何获得某种替代行为,则部分取决于生成运行状况检查响应的原因(或特殊请求的内容)。
动态文件的一种潜在的简单选择是在ExpiresDefault
中使用FilesMatch
。