Используя .htaccess, я устанавливаю обработчик PHP для всех моих .css и js для вывода кода на основе пользовательского агента:
AddHandler application/x-httpd-php .css .js
Например:
<?PHP if ($CurrentBrowser == 'msie') { ?> .bind('selectstart', function(event) { ... }) <?PHP } ?>
Таким образом, мои файлы кода динамически создаются, но могут считаться статическими файлами. Это потому, что, как только они были скомпилированы в первый раз, браузеры могут вернуть их из кеша и повторно использовать их до тех пор, пока я не изменю их содержимое. Вот почему я использую отпечатки пальцев / версии и длительное время на них:
[INDEX.PHP] <script type="application/javascript" src="<?PHP echo GetVersionedFile('/script.js'); ?>"></script> <script type="application/javascript" src="/script.1316108341.js"></script> [.HTACCESS] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule "^(.+)\.(\d+)\.(css|js)$" $1.$3 [L]
Проблема в том, что эти файлы, даже если я отправляю их с соответствующим заголовком, никогда не кэшируются ни одним браузером (я никогда не получаю код 304, всегда 200). Это журнал моих ответов на сервер:
[CHROME] Request URL:http://127.0.0.1:8888/script.1316108341.js Request Method:GET Status Code:200 OK ----- Cache-Control:max-age=31536000, public Connection:Keep-Alive Content-Encoding:gzip Content-Length:6150 Content-Type:application/javascript Date:Thu, 15 Sep 2011 21:41:25 GMT Expires:Fri, 14 Sep 2012 21:41:25 GMT Keep-Alive:timeout=5, max=100 Server:Apache/2.2.17 (Win32) PHP/5.3.6 Vary:Accept-Encoding X-Powered-By:PHP/5.3.6 [MOZILLA] Request URL:http://127.0.0.1:8888/script.1316108341.js Request Method:GET Status Code:200 OK ----- Date Thu, 15 Sep 2011 21:43:26 GMT Server Apache/2.2.17 (Win32) PHP/5.3.6 X-Powered-By PHP/5.3.6 Content-Encoding gzip Vary Accept-Encoding Cache-Control max-age=31536000, public Expires Fri, 14 Sep 2012 21:43:26 GMT Content-Type application/javascript Content-Length 6335 Keep-Alive timeout=5, max=100 Connection Keep-Alive ----- Last Modified Thu Sep 15 2011 23:43:26 GMT+0200 (= time i loaded the page) (???) Last Fetched Thu Sep 15 2011 23:43:26 GMT+0200 (= time i loaded the page) (???) Expires Fri Sep 14 2012 23:43:26 GMT+0200 Data Size 6335 Fetch Count 10 Device disk
В чем может быть проблема? Как я могу принудительно кэшировать эти файлы? Большое большое спасибо!