我们一直在尝试将我们的服务器配置为不缓存我们的.htm文件,因为它会导致我们的分析软件包出现一些问题,并且如果访问者在浏览器中点击后退按钮,则无法正确显示页面。
我们试图通过添加以下内容来解决这个问题:
<FilesMatch "\.(htm)$">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
Header set Warning "Testing"
</FilesMatch>
到我们的httd文件,但它似乎没有执行,但是,当我们移动文件管理器之外的Header集时,它似乎执行正常..
任何人有任何想法我们出错了?
答案 0 :(得分:11)
我最近需要弄清楚同样的问题,虽然这篇文章指出了我正确的方向,但我想分享一些澄清信息,以便对将来搜索这个主题的人进行启发。
David,您的初始FilesMatch无法正常工作,因为FilesMatch仅适用于文件系统中存在的实际物理文件。 http://httpd.apache.org/docs/current/sections.html将其声明为:
目录和文件指令,以及它们的正则表达式对应项,将指令应用于文件系统的某些部分。
这也是您使用LocationMatch的第二篇帖子解决了这个问题的原因。同样来自http://httpd.apache.org/docs/current/sections.html,它声明:
位置指令及其正则表达式对应方另一方面,更改网站空间中内容的配置。 &LT; SNIP&gt;该指令不需要与文件系统有任何关系。例如,以下示例显示如何将特定URL映射到mod_status提供的内部Apache HTTP Server处理程序。文件系统中不需要存在称为服务器状态的文件。
<Location /server-status>
SetHandler server-status
</Location>
Apache docs使用以下语句汇总了此行为:
使用“位置”将指令应用于文件系统之外的内容。对于存在于文件系统中的内容,请使用目录和文件。例外是&lt;位置/&gt;,这是一种简单的方法 将配置应用于整个服务器。
对于那些想要了解更多机制的人来说,这就是我对内部结构的理解:
Apache docs将此行为概括为:
使用什么时
在文件系统容器和webspace容器之间进行选择实际上非常简单。将指令应用于驻留在文件系统中的对象时,请始终使用目录或文件。将指令应用于不驻留在文件系统中的对象(例如从数据库生成的网页)时,请使用位置。
[重要!]在尝试限制对文件系统中对象的访问时,永远不要使用Location。这是因为许多不同的网站空间位置(URL)可以映射到相同的文件系统位置,从而可以规避您的限制。
答案 1 :(得分:8)
此问题现已解决。
为了让它发挥作用,我们已经从使用FilesMatch
更改为LocationMatch
,现在标题设置得非常完美。
我们认为这是因为页面正在从JSP页面重定向到HTML页面。
<LocationMatch "\.(htm|html)$">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
Header set Warning "Testing"
</LocationMatch>
希望其他人会觉得这很有帮助。