Другой подобный подход - использовать htaccess mod_rewrite для игнорирования части пути при обслуживании файлов. Ваша индексная страница, которая никогда не кэшируется, ссылается на последний путь к файлам.
С точки зрения разработки это так же просто, как использование params для номера версии, но столь же надежно, как и подход к имени файла.
Используйте игнорируемую часть пути для номера версии, и сервер просто игнорирует ее и обслуживает некэшированный файл.
1.2.3/css/styles.css
обслуживает тот же файл, что css/styles.css
и первый каталог, который удаляется и игнорируется файлом htaccess
Включение версионных файлов
<?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>
Обратите внимание, что этот подход означает, что вам нужно отключить кеширование вашей индексной страницы - Использование тегов <meta> для отключения кеширования во всех браузерах?
файл .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]
Вы можете использовать тот же подход на любой серверной платформе, которая позволяет переписывать URL
(условие перезаписи адаптировано из mod_rewrite - перезаписать каталог в строку запроса, кроме / #! / )
... и если вам нужна очистка кеша для вашей страницы индекса / точки входа на сайт, вы всегда можете использовать JavaSript для ее обновления.