Une autre approche similaire consiste à utiliser htaccess mod_rewrite pour ignorer une partie du chemin lors de la diffusion des fichiers. Votre page d'index jamais mise en cache fait référence au dernier chemin d'accès aux fichiers.
Du point de vue du développement, c'est aussi simple que d'utiliser des paramètres pour le numéro de version, mais c'est aussi robuste que l'approche du nom de fichier.
Utilisez la partie ignorée du chemin pour le numéro de version, et le serveur l'ignore simplement et sert le fichier non mis en cache.
1.2.3/css/styles.css
sert le même fichier que css/styles.css
depuis que le premier répertoire est supprimé et ignoré par le fichier htaccess
Y compris les fichiers versionnés
<?php
$version = "1.2.3";
?>
<html>
<head>
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
<link rel="stylesheet" type="text/css" href="<?php echo $version ?>/css/styles.css">
</head>
<body>
<script src="<?php echo $version ?>/js/main.js"></script>
</body>
</html>
Notez que cette approche signifie que vous devez désactiver la mise en cache de votre page d'index - Utilisation des balises <meta> pour désactiver la mise en cache dans tous les navigateurs?
fichier .htaccess
RewriteEngine On
# if you're requesting a file that exists, do nothing
RewriteCond %{REQUEST_FILENAME} !-f
# likewise if a directory that exists, do nothing
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise, rewrite foo/bar/baz to bar/baz - ignore the first directory
RewriteRule ^[^/]+/(.+)$ $1 [L]
Vous pouvez adopter la même approche sur n'importe quelle plate-forme de serveur permettant la réécriture d'url
(condition de réécriture adaptée de mod_rewrite - réécriture du répertoire dans la chaîne de requête sauf / #! / )
... et si vous avez besoin d'un contournement du cache pour votre page d'index / point d'entrée de site, vous pouvez toujours utiliser JavaSript pour l'actualiser.