Я полагаю, что единственный способ заставить перезагрузить css - это изменить версию в URL-адресе импорта, как вы упомянули в своем вопросе.
Не уверен, поможет ли это, но , используя php и apache, вы можете использовать filemtime()
вместе с правилами перезаписи, чтобы автоматически обновлять имя версии css всякий раз, когда в файл вносятся изменения.
Вот пример:
// Pass in the url path to the file '/frontend/css/main.css' for example
function css_auto_version($file) {
// Return $file if the path is faulty to prevent errors.
if(strpos($file, '/') !== 0 || !file_exists($_SERVER['DOCUMENT_ROOT'] . $file))
return $file;
// filemtime() returns a timestamp showing the last time the file was changed.
$mtime = filemtime($_SERVER['DOCUMENT_ROOT'] . $file);
// return '/frontend/css/main.TIMESTAMP.css'
return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $file);
}
Затем в файле .htaccess для корня документа необходимо добавить следующее:
RewriteEngine on
RewriteRule ^(.*)\.[\d]{10}\.(css)$ $1.$2 [L]
Это правило переписывания в основном говорит apache вместо '/frontend/css/main.TIMESTAMP.css' в '/frontend/css/main.css'.
Теперь вы можете использовать эту функцию в своем шаблоне php следующим образом echo css_auto_version('/frontend/css/main.css');
, и имя файла в пути всегда будет включать отметку времени последнего изменения файла.
Любой браузер с более старой версией в кэше будет считать, что это совершенно другой файл, и перезагрузить его с сервера Правило перезаписи удалит отметку времени в запросах и позволит серверу найти правильный файл CSS и отправить его обратно в браузер.
Поскольку вы не можете использовать php внутри css-файла, вам, вероятно, придется включить правила @import
в тег style
в HTML и включить туда php.
Подробнее о filemtime
можно прочитать здесь https://www.w3schools.com/php/func_filesystem_filemtime.asp
Если вы действительно хотите просто всегда принудительно перезагружать файл, независимо от того, изменился ли файл на самом деле, тогда я бы предложил установить заголовки http как no-cache в ответе. Подробнее об этом вы можете прочитать здесь:
HTTP Cache-control https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
PHP header () https://www.w3schools.com/php/func_http_header.asp
Надеюсь, это поможет!