Evitar cache de ficheros CSS y JS
Uno de los problemas habituales que tenemos los desarrolladores, es evitar las caches de los navegadores. Frecuentemente este es un problema al inicio y no después cuando el proyecto ya es estable.
Ahora voy a exponer el último método que he hecho servidor para evitar la cache de ficheros CSS y JS. Se trata de combinar PHP con el mod_rewrite del Apache.
Primero que nada, crearemos una función que nos devuelva el nombre (con anticache) del fichero.
function getAntiCache($file){
$firma = '';
$info = pathinfo($file);
if (file_exists(DIR_FS_CATALOG.$file)){
$firma = md5_file(DIR_FS_CATALOG.$file);
}else{
$firma = md5(rand(10000,99999));
}
return $info['dirname'].'/'.$info['filename'].'-'.$firma.'.'.$info['extension'];
}
echo getAntiCache('/recursos/css/www.css');
// Sacara por pantalla /recursos/css/www-{md5_file}.css
Como vemos en el nombre del fichero se incluye la firma en MD5 del fichero, por lo que cada vez que se cambie el contenido del fichero, la firma MD5 cambiará y el nombre del fichero cambiará. Aunque en realidad el nombre del fichero sea siempre el mismo.
Esto lo haremos de puertas hacia fuera con el mod_rewrite del Apache, el recibirá una petición por un fichero que no existe y la transformará a un fichero que si que existe, xq nosotros lo configuraremos así.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^recursos/css/(.*)-(.*).css$ /recursos/css/$1.css?cache=$2 [s=100,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^recursos/js/(.*)-(.*).js$ /recursos/js/$1.js?cache=$2 [s=100,QSA]
Con esto vemos que los clientes nos realizaran peticiones del tipo /recursos/css/web-123ab123eHq132321.css pero que en realiadad van al fichero /recursos/css/web.css de esta forma como obligamos a que el nombre del fichero cambia, no hay cache posible por parte del navegador para este tipo de ficheros.
Espero que este método os sirva de ayuda igual que me ha servido a mi.
