Index: .htaccess
===================================================================
RCS file: /cvs/drupal/drupal/.htaccess,v
retrieving revision 1.109
diff -u -p -r1.109 .htaccess
--- .htaccess	5 May 2010 06:15:59 -0000	1.109
+++ .htaccess	1 Jul 2010 05:24:48 -0000
@@ -109,6 +109,46 @@ DirectoryIndex index.php index.html inde
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_URI} !=/favicon.ico
   RewriteRule ^ index.php [L]
+
+  <IfModule mod_mime.c>
+    # Rules to correctly serve gzip compressed CSS and JS files.
+    # Requires both mod_rewrite and mod_mime to be enabled.
+    # Serve gzip compressed CSS files if they exist and the client accepts gzip.
+    RewriteCond %{HTTP:Accept-encoding} gzip
+    RewriteCond %{REQUEST_FILENAME}\.gz -s
+    RewriteRule ^(.*)\.css $1\.css\.gz [L,QSA,T=text/css]
+
+    # Serve gzip compressed JS files if they exist and the client accepts gzip.
+    RewriteCond %{HTTP:Accept-encoding} gzip
+    RewriteCond %{REQUEST_FILENAME}\.gz -s
+    RewriteRule ^(.*)\.js $1\.js\.gz [L,QSA,T=text/javascript]
+
+    # Serve gzip compressed CSS files as 'text/css' (for newer Apache).
+    <FilesMatch "\.css\.gz$">
+      ForceType text/css
+    </FilesMatch>
+
+    # Serve gzip compressed JS files as 'text/javascript' (for newer Apache).
+    <FilesMatch "\.js\.gz$">
+      ForceType text/javascript
+    </FilesMatch>
+
+    # Force proxies to cache gzipped & non-gzipped css/js files separately.
+    <FilesMatch "(\.js\.gz|\.css\.gz)$">
+      <IfModule mod_headers.c>
+        Header append Vary Accept-Encoding
+      </IfModule>
+      <IfModule !mod_headers.c>
+        # If mod_headers not installed, disable client cache via mod_expires.
+        <IfModule mod_expires.c>
+          ExpiresDefault A0
+        </IfModule>
+      </IfModule>
+    </FilesMatch>
+
+    # Send any files ending in .gz with gzip encoding in the header.
+    AddEncoding gzip .gz
+   </IfModule>
 </IfModule>
 
 # $Id: .htaccess,v 1.109 2010/05/05 06:15:59 webchick Exp $
Index: includes/common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.1188
diff -u -p -r1.1188 common.inc
--- includes/common.inc	1 Jul 2010 00:46:57 -0000	1.1188
+++ includes/common.inc	1 Jul 2010 05:24:48 -0000
@@ -3178,6 +3178,15 @@ function drupal_build_css_cache($css) {
     if (!file_exists($uri) && !file_unmanaged_save_data($data, $uri, FILE_EXISTS_REPLACE)) {
       return FALSE;
     }
+    // If CSS gzip compression is enabled, clean URLs are enabled (which means
+    // that rewrite rules are working) and the zlib extension is available then
+    // create a gzipped version of this file. This file is served conditionally
+    // to browsers that accept gzip using .htaccess rules.
+    if (variable_get('css_gzip_compression', TRUE) && variable_get('clean_url', 0) && extension_loaded('zlib')) {
+      if (!file_exists($uri . '.gz') && !file_unmanaged_save_data(gzencode($data, 9, FORCE_GZIP), $uri . '.gz', FILE_EXISTS_REPLACE)) {
+        return FALSE;
+      }
+    }
     // Save the updated map.
     $map[$key] = $uri;
     variable_set('drupal_css_cache_files', $map);
@@ -4355,9 +4364,18 @@ function drupal_build_js_cache($files) {
     $uri = $jspath . '/' . $filename;
     // Create the JS file.
     file_prepare_directory($jspath, FILE_CREATE_DIRECTORY);
-    if (!file_unmanaged_save_data($contents, $uri, FILE_EXISTS_REPLACE)) {
+    if (!file_exists($uri) && !file_unmanaged_save_data($contents, $uri, FILE_EXISTS_REPLACE)) {
       return FALSE;
     }
+    // If JS gzip compression is enabled, clean URLs are enabled (which means
+    // that rewrite rules are working) and the zlib extension is available then
+    // create a gzipped version of this file. This file is served conditionally
+    // to browsers that accept gzip using .htaccess rules.
+    if (variable_get('js_gzip_compression', TRUE) && variable_get('clean_url', 0) && extension_loaded('zlib')) {
+      if (!file_exists($uri . '.gz') && !file_unmanaged_save_data(gzencode($contents, 9, FORCE_GZIP), $uri . '.gz', FILE_EXISTS_REPLACE)) {
+        return FALSE;
+      }
+    }
     $map[$key] = $uri;
     variable_set('drupal_js_cache_files', $map);
   }
Index: sites/default/default.settings.php
===================================================================
RCS file: /cvs/drupal/drupal/sites/default/default.settings.php,v
retrieving revision 1.48
diff -u -p -r1.48 default.settings.php
--- sites/default/default.settings.php	28 Jun 2010 19:57:34 -0000	1.48
+++ sites/default/default.settings.php	1 Jul 2010 05:24:49 -0000
@@ -371,6 +371,21 @@ ini_set('session.cookie_lifetime', 20000
 # $conf['omit_vary_cookie'] = TRUE;
 
 /**
+ * CSS/JS aggregated file gzip compression:
+ *
+ * By default, when CSS or JS aggregation and clean URLs are enabled Drupal will
+ * store a gzip compressed (.gz) copy of the aggregated files. If this file is
+ * available then rewrite rules in the default .htaccess file will serve these
+ * files to browsers that accept gzip encoded content. This allows pages to load
+ * faster for these users and has minimal impact on server load. If you are
+ * using a webserver other than Apache httpd, or a caching reverse proxy that is
+ * configured to cache and compress these files itself you may want to uncomment
+ * one or both of the below lines, which will prevent gzip files being stored.
+ */
+# $conf['css_gzip_compression'] = FALSE;
+# $conf['js_gzip_compression'] = FALSE;
+
+/**
  * String overrides:
  *
  * To override specific strings on your site with or without enabling locale
? sites/all/modules/README.txt
