使用.htaccess,我将PHP处理程序设置为我的所有.css和js,以便输出基于用户代理的代码:
AddHandler application/x-httpd-php .css .js
Run Code Online (Sandbox Code Playgroud)
例如:
<?PHP if ($CurrentBrowser == 'msie') { ?>
.bind('selectstart', function(event) { ... })
<?PHP } ?>
Run Code Online (Sandbox Code Playgroud)
所以,事实上,我的代码文件是动态创建的,但可以被认为是静态文件.这是因为,一旦他们第一次编译,浏览器就可以从缓存中取回它们并重复使用它们直到我更改它们的内容.这就是我使用指纹识别/版本控制和长时间过期的原因:
[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]
Run Code Online (Sandbox Code Playgroud)
问题是这些文件,即使我用适当的标头发送它们,也不会被任何浏览器缓存(我从来没有得到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 …Run Code Online (Sandbox Code Playgroud)