【问题标题】:Setting cache header via htaccess通过 htaccess 设置缓存头
【发布时间】:2023-03-15 02:24:01
【问题描述】:

我正在通过 htaccess 设置缓存指令。代码:

#team pages
RewriteCond %{REQUEST_URI} !(inc|out\.|admin) [NC]
Header set Cache-Control "max-age=604801, public"
RewriteRule ^([a-z\-]+)(/([a-z_]+))?/?$ team.php?team=$1&res_type=$3 [QSA]

我在 www.web-sniffer.net 对此进行了测试,标题输出很奇怪:

问题:为什么我显然有两个 cache-control 读数?哪个占上风?底部的一个是预期的。我也应该设置 Pragma 缓存吗?

【问题讨论】:

  • 为什么RewriteCond后面有Header set
  • 因为只有在满足该条件时才应输出标头。没有?
  • 不,这不是让它工作的方法。
  • 你不会关心...详细说明,并帮助? :) 这似乎是明智的;毕竟,这就是重写规则的设置方式。
  • 啊哈,抱歉 - 我应该猜到你在写答案。

标签: .htaccess mod-rewrite caching cdn cloudflare


【解决方案1】:

有条件地设置标题:

RewriteCond %{REQUEST_URI} !(inc|out\.|admin) [NC]
RewriteRule ^([a-z\-]+)(/([a-z_]+))?/?$ index.php?team=$1&res_type=$3 [L,QSA,E=cc:1]

Header set Cache-Control "max-age=604801, public" env=REDIRECT_cc

PS:我们需要在环境变量cc之前使用REDIRECT_前缀,因为mod_rewrite在每次重写循环迭代结束时为每个环境变量添加了这个前缀。

【讨论】:

  • 谢谢,但这里的意义是什么——仅仅是标题出现在规则之后?这并不能解释为什么我仍然在 websniffer.com 上看到两个 cache-control 标头
  • Header 指令不是来自mod_rewrite 模块,因此您必须使用env 变量,如图所示。不确定是否有多个条目,但我认为只使用了最后一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 2011-01-28
  • 1970-01-01
相关资源
最近更新 更多