问题描述
我几天来一直在尝试解决这个问题,并最终制作了一个足够简单的测试环境,以便我可以用几个示例发布这个问题。
我遇到的问题是我的 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-Control
是 max-age
示例 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
标头
编辑:出现了一条线索,表明我可以在 If/Else 条件中使用 301 RedirectMatch,因此似乎缓存控制标头在条件中被忽略了。 . 如果是这种情况,我很好奇还有哪些其他选项可以使我的用例(如上所述)工作。
编辑 2:另一个线索是,如果没有 Cache-Control
行,Cache-Control max-age 标头将按预期应用(只是不适用于正确的文件)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)