如何使用正确的HTTP缓存通过JSMin PHP脚本提供文件(使用.htaccess?)

时间:2009-08-20 18:01:14

标签: php apache .htaccess mod-rewrite

我正在使用JSMin的PHP脚本在服务之前从我的javascript和css文件中删除注释和空格。如果我设置

<script src="jsmin.php?file=myfile.js">

文件不会被缓存,因为从不检查Last-Modified HTTP标头的脚本。因此,为了通过JSMin运行文件并(希望)启用缓存,我使用.htaccess进行以下设置:

RewriteEngine on
RewriteRule ^.*$ jsmin.php?file=%{REQUEST_FILENAME} [NC,L]

然后我可以使用:

<script src="myfile.js">

并获得JSMin的效果。

Apache仍然没有使用Last-Modified标头提供文件,因此浏览器仍然没有缓存它。有没有办法可以查看Apache中的If-Modified-Since标头,如果相关文件在适当的时间被修改,那么只提供JSMin脚本?否则,我希望浏览器使用缓存版本。

2 个答案:

答案 0 :(得分:3)

+1用于构建过程。 部署应该是自动化的。这使结果可预测。

另外, 在url中使用类似文件路径的文件路径要求某人取消引用它并加载他们不应该的文件。 考虑:

<script src="jsmin.php?file=../../../../../../../../../../../../../../etc/passwd">

如果您的脚本只是将其传递给您遇到麻烦的命令行。

答案 1 :(得分:0)

为什么不在部署之前压缩文件?在运行时压缩它似乎更复杂,更慢。

我使用 http://developer.yahoo.com/yui/compressor/