2011-09-22 58 views
11

運行資源:預編譯rake任務時,將創建gzip版本的應用程序資產。根據資產管道的Rails指南,您可以配置您的Web服務器(在我的情況下爲Apache 2.2)來提供這些預壓縮文件,而不是讓Web服務器完成工作。如何配置mod_deflate以提供使用資源準備的gzip資源:預編譯

什麼我不明白是如何獲得mod_deflate配置,以便這些文件被服務而不是被雙重壓縮,然後服務?

我必須通過httpd.conf中啓用了mod_deflate模塊:

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript 
BrowserMatch ^Mozilla/4 gzip-only-text/html 
BrowserMatch ^Mozilla/4\.0[678] no-gzip 
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 

而且我已經轉換導軌上的代碼引導進入的.htaccess公共/資產:

# Some browsers still send conditional-GET requests if there's a 
# Last-Modified header or an ETag header even if they haven't 
# reached the expiry date sent in the Expires header. 

Header unset Last-Modified 
Header unset ETag 
FileETag None 

# RFC says only cache for 1 year 

ExpiresActive On 
ExpiresDefault "access plus 1 year" 

# Serve gzipped versions instead of requiring Apache to do the work 

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME}.gz -s 
RewriteRule ^(.+) $1.gz [L] 

# without it, Content-Type will be "application/x-gzip" 

<FilesMatch .*\.css.gz> 
    ForceType text/css 
</FilesMatch> 

<FilesMatch .*\.js.gz> 
    ForceType text/javascript 
</FilesMatch> 

任何想法如何正確設置這個?

回答

24

首先,你不希望mod_deflate在這裏操作。因此,在您的資產.htaccess文件中添加:

SetEnv no-gzip 

這應該關閉您的資產的mod_deflate。第二,我討厭不同意鐵路人員,但我認爲他們的資產.htaccess配方存在一些缺陷。頂部是好的,但對於RewriteEngine敘述及以後我有:

RewriteEngine on 
# Make sure the browser supports gzip encoding before we send it 
RewriteCond %{HTTP:Accept-Encoding} \b(x-)?gzip\b 
RewriteCond %{REQUEST_URI} .*\.(css|js) 
RewriteCond %{REQUEST_FILENAME}.gz -s 
RewriteRule ^(.+) $1.gz [L] 

# without it, Content-Type will be "application/x-gzip" 
# also add a content-encoding header to tell the browser to decompress 

<FilesMatch \.css\.gz$> 
    ForceType text/css 
    Header set Content-Encoding gzip 
</FilesMatch> 

<FilesMatch \.js\.gz$> 
    ForceType application/javascript 
    Header set Content-Encoding gzip 
</FilesMatch> 
+1

小評 - 如果這不是在.htaccess,它需要在目錄部分,否則-s將無法正常工作。 – lzap

+3

另外,您可能應該推薦使用'application/javascript'而不是'text/javascript'。請參閱*腳本媒體類型*上的[RFC4329](https://tools.ietf.org/html/rfc4329)。 – tne

+0

我必須做的 \t AddEncoding gzip .gz 否則不錯 – Torsten