2011-09-22 15 views
11

Khi chạy nội dung: tác vụ cào trước biên dịch, phiên bản được nén của nội dung ứng dụng được tạo. Theo hướng dẫn Rails cho đường ống nội dung, bạn có thể cấu hình máy chủ web của bạn (trong trường hợp của tôi Apache 2.2) để phục vụ các tệp nén này thay vì có máy chủ web thực hiện công việc.Cách định cấu hình mod_deflate để phân phát nội dung gzipped được chuẩn bị bằng nội dung: biên dịch trước

Những gì tôi không thể tìm ra là làm thế nào để có được mod_deflate cấu hình để các tập tin này được phục vụ thay vì được nén hai lần và sau đó phục vụ?

Tôi có mod_deflate kích hoạt qua httpd.conf:

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 

Và tôi đã chuyển đổi mã trên đường ray dẫn đến đi vào .htaccess ở nơi công cộng/tài sản:

# 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> 

Bất kỳ ý tưởng làm thế nào để thiết lập này đúng cách?

Trả lời

24

Trước tiên, bạn không muốn mod_deflate hoạt động tại đây. Vì vậy, trong tài sản của bạn .htaccess tệp thêm:

SetEnv no-gzip 

Điều này sẽ tắt mod_deflate cho nội dung của bạn.

Thứ hai, tôi ghét không đồng ý với những người viết đường ray, nhưng tôi nghĩ rằng có một vài thiếu sót trong tài sản của họ .htaccess recipe. Phần trên là tốt nhưng đối với RewriteEngine và hơn thế nữa tôi có:

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

Nhận xét nhỏ - nếu không có trong .htaccess, nó CẦN phải nằm trong phần Thư mục, nếu không -s sẽ không hoạt động. – lzap

+3

Ngoài ra, bạn có thể nên đề nghị sử dụng 'application/javascript' thay vì' text/javascript'. Xem [RFC4329] (https://tools.ietf.org/html/rfc4329) trên * Loại phương tiện kịch bản *. – tne

+0

tôi phải làm \t AddEncoding gzip .gz nếu không tốt – Torsten

Các vấn đề liên quan