htaccess / mod_expires - 缓存特定文件

8

好的,我查阅了很多有关如何使用.htaccess文件管理浏览器缓存内存的网站,但对我来说仍然不是很清楚。

我想将特定文件缓存一个月。对于其余部分,我希望每次都刷新。所以我尝试了以下内容:

<IfModule mod_headers.c> 
    Header unset Cookie
    Header unset Set-Cookie
    Header unset Cache-Control
    Header unset ETag
    FileETag none 
</IfModule>

<IfModule mod_expires.c>  
    ExpiresActive On
    ExpiresDefault "now"
    <Files "/css/jquery-ui.css">
      ExpiresDefault "access plus 1 month"
    </Files>
    <Files "/js/jquery-1.10.2.min.js">
      ExpiresDefault "access plus 1 month"
    </Files>
    <Files "/js/jquery-ui.js">
      ExpiresDefault "access plus 1 month"
    </Files>
    <Files "/js/analytics.js">
      ExpiresDefault "access plus 1 month"
    </Files>
    <Files "/matheos/img/*">
      ExpiresDefault "access plus 1 month"
    </Files>
    <Files "/img/*">
      ExpiresDefault "access plus 1 month"
    </Files>
</IfModule>

但它并没有像预期的那样工作...

HTML 没有被缓存,但是像 jquery-ui.css 这样应该被缓存一个月的特定文件也没有被缓存。

无论如何,这个 .htaccess 对你来说是否看起来正常?

1个回答

10

好的,我明白了!要针对特定文件进行操作,正确的语法是:

# to not cache css except jquery-ui.css
ExpiresByType text/css "now"
<FilesMatch "jquery-ui\\.css$">
    ExpiresByType text/css "access plus 1 month"
</FilesMatch>

在我的情况下,这是唯一可行的方法,至少对于ovh共享主机而言。我也尝试了所有可能的ExpiresDefault组合,但它并没有起作用...


为什么在CSS文件路径中间加两个反斜杠?那是.htaccess文件特有的转义字符吗? - xxxRxxx
是的,因为点在正则表达式中是一个特殊字符。 - Sharcoux
1
您无需双重转义 http://httpd.apache.org/docs/current/mod/core.html#filesmatch - chpio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接