我有一个与 Deflate Compression、Apache (htaccess) 和 CSS 文件相关的非常有趣的问题。
我的服务器上有两个 CSS 文件。一种叫做styles.php,在styles/目录下通过mod_rewrite根据数据库值添加动态值(从styles.php重写为site.css,文件开头有text/css头)。我还有一个常规的旧 css 文件,其静态内容在名为 styles.css 的同一目录中不会更改。
我想为我的站点添加压缩,所以我添加了以下行来开始压缩我的 css 和 js 文件。我将此添加到我网站的 root_directory 中。
<ifModule mod_deflate.c>
<filesMatch "\.(js|css)$">
SetOutputFilter DEFLATE
</filesMatch>
</ifModule>
好吧,最初那行不通。所以我将根 htaccess 文件中的这一行从这个更改为下一个。(下面的代码位于文件顶部)
AddType application/x-httpd-php5 .html .php
AddType application/x-httpd-php5 .html .php .js .css
然后我的 js 和其中一个 css 文件开始被压缩(用 YSlow 验证......耶!)。奇怪的是,被重写的 css 文件被压缩(styles.php 文件),但styles.css 文件(静态文件)不再被浏览器读取。一旦我从该 AddType 行中删除“.css”,浏览器就会再次开始读取文件并且我的 css 恢复正常,但是它不再通过 apache 压缩。
如果我添加类型,为什么浏览器不读取静态 css 文件有什么想法吗?我只用 text/css 而不是 .css 进行了尝试,它没有压缩文件(但浏览器解释了它)。
更新:
我将此添加到根 htaccess 文件中。我们现在已经压缩、解释了甜蜜。
<filesMatch "\.css$">
FileETag None
<ifModule mod_headers.c>
Header set Content-type "text/css"
</ifModule>
</filesMatch>