我使用預分解的gzip CSS和JS文件,以便服務器不會在運行中執行此操作。Apache設置將gzip CSS/JS文件發送到瀏覽器
所以在同一個文件夾我有file.css(gzipped版本),file.nozip.css(nogzipped版本)。然後根據瀏覽器是否接受gzip文件,發送正確的版本。
所以我在.htaccess如下:
RewriteEngine On
RewriteRule ^(.*)\.[0-9]+\.css$ $1.css [L]
#redirect Konqueror and "old browsers"
RewriteCond %{REQUEST_FILENAME} !\.nogzip\.css$
RewriteCond %{HTTP:Accept-encoding} !gzip [OR]
RewriteCond %{HTTP_USER_AGENT} Konqueror
RewriteRule ^(.*)\.css$ $1.nogzip.css [L]
<IfModule mod_headers.c>
Header set Vary User-Agent
#set Content-Encoding for all css files
<FilesMatch .*\.css$>
Header set Content-Encoding: gzip
Header set Cache-control: private
</FilesMatch>
#drop Content-Encoding in case we send not gzipped file
<FilesMatch .*\.nogzip\.css$>
Header unset Content-Encoding
</FilesMatch>
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A36000000
</IfModule>
這種方法我都用在Windows上,很多次,以及在Linux服務器上。總是工作得很好。
但是,最近在開發另一個網站時,我遇到了瀏覽器無法識別gzip文件的問題。
在localhost工作,這裏是響應頭:
Accept-Ranges:bytes
Cache-control:private
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:39115
Content-Type:text/css
Date:Wed, 17 Jun 2015 11:27:28 GMT
ETag:"98cb-517998d9e690c"
Keep-Alive:timeout=5, max=100
Last-Modified:Wed, 03 Jun 2015 09:19:16 GMT
Server:Apache/2.4.12 (Win64) OpenSSL/1.0.1m PHP/5.6.9
Vary:User-Agent
X-Distributed-by:AHC
這是從生產服務器接收到的報頭(不工作 - 在瀏覽器拉鍊顯示css文件):
Accept-Ranges:bytes
Cache-control:private
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:39099
Content-Type:text/css
Date:Wed, 17 Jun 2015 11:30:08 GMT
ETag:"98cb-517998d8fcd00-gzip"
Keep-Alive:timeout=5, max=99
Last-Modified:Wed, 03 Jun 2015 09:19:16 GMT
Server:Apache/2.4.10 (Debian)
Vary:User-Agent
唯一的區別是「X-Distributed-by:AHC」,但這很難成爲問題的原因。
任何想法還有什麼要檢查?
我有同樣的問題。你解決了這個問題嗎? –