.htaccess htaccess-如何强制客户端';使用浏览器清除缓存?

.htaccess htaccess-如何强制客户端';使用浏览器清除缓存?,.htaccess,caching,gzip,.htaccess,Caching,Gzip,对于我的站点,我有以下访问规则: # BEGIN Gzip <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript </IfModule> # END Gzip # BEGIN EXPIRES <IfModule mod

对于我的站点,我有以下访问规则:

# BEGIN Gzip
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
</IfModule>
# END Gzip

# BEGIN EXPIRES
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 10 days"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType text/plain "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType application/x-javascript "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType application/x-icon "access plus 1 year"
</IfModule>
# END EXPIRES
#开始Gzip
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
#结束Gzip
#开始过期
过期于
ExpiresDefault“访问加10天”
ExpiresByType文本/css“访问加1个月”
ExpiresByType文本/纯文本“访问加1个月”
ExpiresByType image/gif“访问加1个月”
ExpiresByType图像/png“访问加1个月”
过期按类型图像/jpeg“访问加1个月”
ExpiresByType应用程序/x-javascript“访问加1个月”
ExpiresByType应用程序/javascript“访问加1个月”
过期按类型应用程序/x图标“访问加1年”
#期满

我刚刚更新了我的网站,在我清除缓存之前,它看起来很糟糕。如何在更新后强制客户端浏览器清除缓存,以便用户可以看到更改?

您可以强制浏览器缓存某些内容,但是

不能强制浏览器清除缓存。 因此,唯一的(AMAIK)方法是为您的资源使用新URL。类似于版本控制。

我知道你的问题

虽然我们可以完全清除客户端浏览器缓存,但您可以向应用程序中添加一些代码,以便将最近的更改反映到客户端浏览器中

在您的
中:



来源:

您不能强制浏览器清除缓存

由于.html文件在10天后过期,因此它似乎会很快重新加载。
您需要做的是更新.html文件并将所有文件移动到一个新文件夹中,如
version-2/
,或在每个文件中添加一个版本标识符,如
mypicture-2.jpg
。然后,您在.html文件中引用这些新文件,浏览器将再次加载它们,因为位置已更改。

正如其他答案所述,更改URL是一种很好的缓存破坏技术,但是要浏览更大的网站、更改所有URL并移动文件,需要做很多工作

类似的技术是只向URL字符串添加一个版本参数,该参数可以是随机字符串/数字,也可以是版本号,并且只针对更改的文件

例如,如果您更改了站点CSS,并且在执行强制刷新之前它看起来不稳定,只需将
?ver=1.1
添加到文件头部的CSS导入中即可。这与浏览器中的文件不同,但您只需要更改导入,而不需要更改文件的实际位置或名称

e、 g:

变成


也适用于javascript文件。

您可以设置“access plus 1秒”,这样用户下次进入站点时,它将刷新。将此设置保留一个月。

您可以通过在标题中粘贴以下代码告知浏览器从不缓存您的站点

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

为了防止js、css缓存,您可以使用该工具缩小和模糊脚本,每次都会生成一个随机文件名。这将迫使浏览器也从服务器重新加载它们


希望这会有所帮助。

最直接的方法是在请求中添加filetime。 乙二醇

myfile.txt?2014-10-30-13:12:33


按日期进行版本控制。

更改.CSS文件的名称
加载页面,然后再次更改文件的原始名称,它适合我

在我的例子中,我对一个特定的JS文件做了很多更改,我需要它在所有使用的浏览器中都是最新版本

我没有此文件的特定版本号,因此我只需将当前日期和时间(小时和分钟)散列出来并将其作为版本号传递:

<script src="/js/panel/app.js?v={{ substr(md5(date("Y-m-d_Hi")),10,18) }}"></script>


我需要每分钟加载一次,但您可以决定何时重新加载。

现在,以下内容无法帮助您处理已缓存的文件,但向前看,您可以使用以下内容轻松强制请求获取新文件,而无需更改实际文件名

# Rewrite all requests for JS and CSS files to files of the same name, without
# any numbers in them. This lets the JS and CSS be force out of cache easily
# by putting a number at the end of the filename
# e.g. a request for static/js/site-52.js will get the file static/js/site.js instead.
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^static/(js|css)/([a-z]+)-([0-9]+)\.(js|css)$ /site/$1/$2.$4 [R=302,NC,L]
</IfModule>
然后,您可以开始在html中将其引用为“assets XXX”,并使用类似这样的规则将所有资产内容从缓存中踢出

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^assets-([a-z0-9]+)/(.*) /$2 [R=302,NC,L]
</IfModule> 

重新启动发动机
重写规则^assets-([a-z0-9]+)/(.*)/$2[R=302,北卡罗来纳州,北卡罗来纳州]
请注意,如果您确实这样做,在它工作后,将302更改为301,然后缓存将启动。当它是302时,它不会在浏览器级别缓存,因为这是一个临时重定向。如果您这样做,那么您可以将所有资产的到期默认时间提高到30天,因为您只需更改登录页面中的文件夹名称,就可以轻松地将内容从缓存中清除

<IfModule mod_expires.c>
  ExpiresActive on
  ExpiresDefault A2592000
</IfModule>

过期于
到期默认A2592000

这对我很有效

看看这个:

    DirectoryIndex index.php
替换为:

    DirectoryIndex something.php index.php
上传和刷新页面。您将得到一个页面错误。

只需将其更改回:

    DirectoryIndex index.php

重新加载并刷新页面
我在我所有的设备上都检查了这个,它成功了。

使用R=301的mod rewrite-使用增量版本号:

<script src="/js/panel/app.js?v={{ substr(md5(date("Y-m-d_Hi")),10,18) }}"></script>
要实现>css/ver/file.css=>css/file.css?v=ver

重写规则^css/([0-9]+)/file.css$css/file.css?v=$1[R=301,L,QSA]

例如,css/10/file.css=>css/file.css?v=10

同样的方法也适用于js/文件。增量版本强制更新,301强制重新缓存

我已经在Chrome、Firefox、Opera等浏览器上进行了测试


PS:?v=ver只是为了可读性,这不会导致刷新,在URL中添加“随机”数字对我来说既不雅观又昂贵。它还会破坏页面的URL,看起来像
index.html?t=1614333283241
,顺便说一句,用户一次使用就会缓存几十个URL。
我认为这类事情是
.htaccess
文件在服务器端解决的,在您的功能代码和用户之间

我从允许筛选的位置复制/粘贴此代码
    DirectoryIndex index.php
# DISABLE CACHING
<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

<FilesMatch "\.(css|flv|gif|htm|html|ico|jpe|jpeg|jpg|js|mp3|mp4|png|pdf|swf|txt)$">
    <IfModule mod_expires.c>
        ExpiresActive Off
    </IfModule>
    <IfModule mod_headers.c>
        FileETag None
        Header unset ETag
        Header unset Pragma
        Header unset Cache-Control
        Header unset Last-Modified
        Header set Pragma "no-cache"
        Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
        Header set Expires "jue, 1 Jan 1970 00:00:00 GMT"
    </IfModule>
</FilesMatch>