Версии в CDN

Есть ли способ достижения аналогичного решения для версии на CDN (а не Cloudfront, Edgecast в этом случае) для js и css файлов как довольно опрятный, сочетающий правило Rewrite и PHP, описанные в этом потоке ? Я не знаю, как сделать комбинацию PHP / mod-rewrite работать на CDN, часто менять мои версии и не выполнять рутинирование вручную. Я использую cookieless, полностью отдельный домен, чтобы служить статическому контенту, поэтому я должен указать полный url в функции.

Для удобства я изложу код из другого потока здесь.

Во-первых, мы используем следующее правило перезаписи в .htaccess:

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-s # Make the file doesn't actually exist RewriteRule ^(.*)\.[\d]+\.(css|js)$ $1.$2 [L] # Strip out the version number 

Теперь мы пишем следующую функцию PHP:

 /** * Given a file, ie /css/base.css, replaces it with a string containing the * file's mtime, ie /css/base.1221534296.css. * * @param $file The file to be loaded. Must be an absolute path (ie * starting with slash). */ function auto_version($file) { if(strpos($file, '/') !== 0 || !file_exists($_SERVER['DOCUMENT_ROOT'] . $file)) return $file; $mtime = filemtime($_SERVER['DOCUMENT_ROOT'] . $file); return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $file); } 

Теперь, когда мы включаем наш CSS, мы меняем его:

 <link rel="stylesheet" href="/css/base.css" type="text/css" /> 

к этому:

 <link rel="stylesheet" href="<?=auto_version('/css/base.css')?>" type="text/css" /> 

Это будет выглядеть как нечто подобное, гарантируя, что последняя версия всегда будет обслуживаться, без необходимости обновлять версии вручную:

 <link rel="stylesheet" href="/css/base.1251992914.css" type="text/css" /> 

Чтобы заставить это работать во внешнем CDN (в совершенно другом домене), я попытался заменить

 <link rel="stylesheet" href="<?=auto_version('/css/base.css')?>" type="text/css" /> 

что-то вроде этого …

 <link rel="stylesheet" href="<?='http://cdn.externaldomain.com' . auto_version('/css/base.css')?>" type="text/css" /> 

Но обертка функции вокруг внутреннего URL-адреса и добавление домена CDN, похоже, не работает …

Solutions Collecting From Web of "Версии в CDN"

Получается мое решение:

 <link rel="stylesheet" href="<?= 'http://cdn.externaldomain.com' . auto_version('/css/base.css') ?>" type="text/css" /> 

работает. Я просто пропустил пробел в коде.

Просто предложение: взгляните на Aptimize

Проблемы с версиями решены. Многие CDN выполняют только периодическую проверку версий, что означает, что страницы могут обслуживаться с устаревшими ресурсами. Aptimize активно обнаруживает изменения версии и гарантирует, что страницы остаются актуальными, с уникальным механизмом управления версиями с автоматической URL-адресом и агрессивным кэшированием ресурсов в браузере.