Outra abordagem semelhante é usar o htaccess mod_rewrite para ignorar parte do caminho ao servir os arquivos. Sua página de índice nunca armazenada em cache faz referência ao caminho mais recente para os arquivos.
Do ponto de vista do desenvolvimento, é tão fácil quanto usar parâmetros para o número da versão, mas é tão robusto quanto a abordagem do nome do arquivo.
Use a parte ignorada do caminho para o número da versão e o servidor apenas o ignora e serve o arquivo não armazenado em cache.
1.2.3/css/styles.css
serve o mesmo arquivo css/styles.css
desde que o primeiro diretório é removido e ignorado pelo arquivo htaccess
Incluindo arquivos com versão
<?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>
Observe que essa abordagem significa que você precisa desativar o cache da sua página de índice - Usando as tags <meta> para desativar o cache em todos os navegadores?
arquivo .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]
Você pode adotar a mesma abordagem em qualquer plataforma de servidor que permita a reescrita de URL
(condição de reescrita adaptada do mod_rewrite - reescreva o diretório para a string de consulta, exceto / #! / )
... e se você precisar interromper o cache do ponto de entrada da página de índice / site, sempre poderá usar o JavaSript para atualizá-lo.