在 htaccess 文件中忽略 <If> 和 <Else> 条件中的缓存控制标头

问题描述

我几天来一直在尝试解决这个问题,并最终制作了一个足够简单的测试环境,以便我可以用几个示例发布这个问题。

我遇到的问题是我的 htaccess 文件同时忽略了 <If><Else> 条件。我正在使用支持此功能的 Apache 2.4.29 版。同样,当我保存 htaccess 文件时,我没有收到 500 级错误 - 网站运行良好(除了这些被忽略)。

我的用例是我想侦听查询参数并根据该查询参数是否存在更改 Cache-Control 标头。我相信其他人会不同意这个前提,虽然我很好奇什么是更好的解决方案,但我想深入了解这个特定问题。

我尝试向 <If> 提供几个条件,认为可能只是不喜欢格式或者我在那里做错了什么,但我现在将其简化为简单的 {{1} }} 尝试强制条件的 <If false> 一侧。无论我做什么,条件的任何一方都不起作用 - 它被完全忽略了。

我做错了吗?我相信我的语法 matches the documentation,但也许我遗漏了一些东西......虽然我确实有很多编写 .htaccess 文件的经验,但我承认我远非 Apache 专家。

测试用例

我制作了一个网页,它只加载一个 <Else> 文件,并读取了 Chrome DevTools 中的 Cache-Control 标头。


示例 A

.htaccess 文件内容:

image.png

预期:<FilesMatch "png"> Header set Cache-Control "max-age=123,public" </FilesMatch> <If false> <FilesMatch "png"> Header unset Cache-Control Header set Cache-Control "max-age=0,no-cache,no-store,must-revalidate" </FilesMatch> </If> <Else> <FilesMatch "png"> Header set Cache-Control "max-age=31536000,public" </FilesMatch> </Else> Cache-Control 应该是 max-age

实际:31536000 Cache-Controlmax-age

max-age is 123


示例 B

.htaccess 文件内容:

123

预期:<If false> <FilesMatch "png"> Header unset Cache-Control Header set Cache-Control "max-age=0,public" </FilesMatch> </Else> Cache-Control 应该是 max-age

实际:根本不存在 31536000 标头

No cache-control header at all


编辑:出现了一条线索,表明我可以在 If/Else 条件中使用 301 RedirectMatch,因此似乎缓存控制标头在条件中被忽略了。 . 如果是这种情况,我很好奇还有哪些其他选项可以使我的用例(如上所述)工作。

编辑 2:另一个线索是,如果没有 Cache-Control 行,Cache-Control max-age 标头将按预期应用(只是不适用于正确的文件)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)