我遇到过类似的问题,我无法在 htaccess 文件中为 JS 和 CSS 文件设置完整缓存标头,结果发现我无法这样做,因为服务器上设置了缓存过期时间,我必须在 vhost 容器中添加 AllowOverride all 才能使其正常工作,但我仍然无法在页面上为 text/html 设置完整缓存标头。我可以使用 htaccess 文件中的 mod_expires 设置 max-age,但如果我尝试使用以下命令设置缓存标头:
<FilesMatch "\.(html|htm|rtf|rtx|txt|xsd|xsl|xml|HTML|HTM|RTF|RTX|TXT|XSD|XSL|XML)$">
FileETag MTime Size
<IfModule mod_headers.c>
Header set Pragma "public"
Header set Cache-Control "no-cache, must-revalidate, public"
</IfModule>
</FilesMatch>
no-cache、must-revalidate、public 均未显示。cache-control 中唯一显示的是 max-age。有谁知道如何修复此问题,以便我可以在 htaccess 中为 text/html 设置整个缓存标头?
这是我按照 Bob 的建议做的但仍然不起作用:
<FilesMatch ".+\.(html|htm|rtf|rtx|txt|xsd|xsl|xml|HTML|HTM|RTF|RTX|TXT|XSD|XSL|XML)$">
FileETag MTime Size
<IfModule mod_headers.c>
Header set Pragma "public"
Header set Cache-Control "no-cache, must-revalidate, public"
</IfModule>
</FilesMatch>
我正在尝试在 DevTools > Network 中为名为“/”的文件设置缓存标头,启动器为“document”,类型为“html”。
答案1
您的正则表达式似乎不正确。目前它仅匹配名为 等的文件.html
,.htm
而不是您可能想要的所有带有 .html 扩展名的文件。
尝试:
<FilesMatch ".+\.(html|htm|rtf|rtx|txt|xsd|xsl|xml|HTML|HTM|RTF|RTX|TXT|XSD|XSL|XML)$">
答案2
以下是我尝试执行的操作。您实际上并未指定文件类型。这很令人困惑,因为您可以使用带有 mod_expires 的 text/html 类型来设置此文件的最大使用期限。
<IfModule mod_headers.c>
Header set Cache-Control "max-age=31536000, no-cache, must-revalidate, public"
Header set Pragma "no-cache"
</IfModule>