仅当网站中的内容发生变化时才设置缓存标头(php,htaccess)

时间:2016-02-08 11:19:27

标签: javascript php wordpress .htaccess caching

我正在运行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代码修复它。任何帮助表示赞赏。

1 个答案:

答案 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" />

这意味着文件数据更改后的第一次加载会强制刷新。