簡體   English   中英

僅當網站(php,htaccess)發生更改時才設置緩存頭

[英]set cache headers only when something changed in the website (php, htaccess)

我正在運行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代碼修復它。 任何幫助表示贊賞。

您可以為不同的文件擴展名設置過期標題,如下所示:

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

對於您知道會更定期更改的特定文件,可以在URL中添加擴展名,例如?=[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" />

這意味着文件數據更改后的首次加載將強制刷新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM