ci sono due aspetti da considerare: cache del file php (o altro linguaggio dinamico che sia), e cache dei contenuti.
in php il "no cache" si imposta con queste intestazioni:
codice:
// la prima riga in realtà dovrebbe solo aiutare i motori di ricerca, quindi dal punto di vista della cache non so se funzioni realmente.
header("Expires: on, 01 Jan 1970 00:00:00 GMT");
// anche la seconda non vedo come possa aiutare: è solo un'informazione sull'ultima modifica.
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// questa tre sono quella che hanno un senso.
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
diverso discorso è per i contenuti: immagini, css, script...
se non diversamente specificato dall'utente (o dal programmatore) non c'è motivo di ricaricare elementi statici, è solo traffico in più senza un guadagno dal punto di vista della performance e dell'utente.
quindi: NON si cambia foto senza cambiarne il nome (lo stesso per css e script)
tuttavia non vogliamo cambiare il nome al css (o ad altro) ogni volta che facciamo un aggiornamento, giusto?
qui ci soccorre la querystring (come ti hanno già suggerito).
il metodo più semplice è inserire uno script che legga la data dell'ultima modifica del file che vuoi chiamare (anno-mese-giorno-ora-minuti-secondi), e accodare la querystring con questo valore al nome del file, es:
codice:
<link href="css/theme/bootstrap/bootstrap.min.css?t=<?php echo varLastMod ?>" rel="stylesheet">
spero di averti aiutato