我有一个包含此文件的文件夹:channel.html
在同一个文件夹中我有这个 .htaccess 文件
<Files channel.html>
ExpiresActive On
ExpiresDefault A31536000
Header set Cache-Control "max-age=31536000"
</Files>
curl-I/channel.html:
HTTP/1.1 200 OK
Date: Wed, 09 Nov 2011 17:27:30 GMT
Server: Apache
Accept-Ranges: bytes
X-Mod-Pagespeed: 0.9.18.7-900
Cache-Control: max-age=0, no-cache, no-store
Vary: Accept-Encoding
Content-Length: 59
Content-Type: text/html
如果我添加ForceType text/plain
.htaccess,它可以正常工作,但Content-Type
显然是错误的。
我应该怎么做才能修复或调试这个烦恼?
答案1
由于 Expires 标头适用于 text/plain 但不适用于 text/html,您是否尝试过添加ExpiresByType text/html "access plus 1 year"
?或者,在配置的其余部分中搜索ExpiresByType text/html
其他位置的指令,以覆盖您的默认值?
答案2
您可能有一些东西重置了您的标头。如果这是脚本而不是直接的静态内容,那么您的 Web 应用程序也可能正在设置缓存标头。
另外,我看到您正在使用 mod_page speed。我知道它会尝试进行一些优化,也许它也在为您设置标题。
我会尝试这样做:在 .htaccess 中取消设置 Cache-Control 标头,看看是否仍会收到缓存标头。如果收到,则说明缓存标头已注入到其他地方。
通过改变 mime/type,它表明无论设置什么标题都只是针对 text/html 进行设置,因此它不会触及 text/plain。
答案3
您是否启用了标头重写?如果您发现无效命令“ExpiresActive”,可能是拼写错误或由服务器配置中未包含的模块定义
在 apache2/error.log 中,你可能需要运行 sudo a2enmod headers
按照建议https://stackoverflow.com/questions/8260738/ruby-on-rails-3-1-leverage-browser-caching