我正在运行wordpress。在.htaccess文件中添加了此代码,以便用户可以看到最新版本的网站,而不是缓存的网站。
<IfModule mod_rewrite.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</IfModule>
但现在加载速度非常慢,原因很明显。每次刷新时,它会再次加载新文件。我想知道是否有任何其他方法来检测何时更改了某些内容,然后以其他方式添加这些标头或清除缓存。不想使用任何插件。想通过一些php或javascript代码修复它。任何帮助表示赞赏。
答案 0 :(得分:4)
您可以为不同的文件扩展名设置expires标头,如下所示:
<IfModule mod_expires.c>
ExpiresActive on
# Your document html
ExpiresByType text/html "access plus 0 seconds"
# Media: images, video, audio
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# CSS and JavaScript
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
</IfModule>
对于您知道会定期更改的特定文件,您可以向网址添加?=[timestamp]
等扩展程序,以便浏览器将其识别为新版本。
例如,当您希望查看者查看新版本时,您可以将.js
文件更改为main.js?version=2
。
或者,您可以将扩展名更改为main.js?ts=<?php echo date() ?>
,以便在每次访问时重新加载文件,因为时间戳每次都会有所不同。
编辑另一种解决方案是使用文件的最后编辑时间(使用filemtime()
)作为参数追加,如下所示:
<script type='text/javascript' src='main.js?fmt=<?= filemtime("main.js") ?>'>
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); echo '?ver=' . filemtime( get_stylesheet_directory() . '/style.css'); ?>" type="text/css" media="all" />
这意味着文件数据更改后的第一次加载会强制刷新。