.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>