Apache:我无法使用 htaccess 为 text/html 设置完整缓存标头

Apache:我无法使用 htaccess 为 text/html 设置完整缓存标头

我遇到过类似的问题,我无法在 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>

相关内容