Normally you can easily enable Gzip compression using mod_deflate by adding the following lines to your .htaccess
file:
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
But for those of you on shared hosts that don’t allow the mod_deflate module and run PHP in CGI/FastCGI mode you can’t go with the easy method.
So, to serve up your PHP, CSS, and JS files you can try the following method.
Note 1: Your shared web hosting account must support custom php.ini
and .htaccess
files.
Note 2: Be careful when mixing this solution with other cache/compression applications.
Step 1: PHP Configuration
Add or modify the following lines in your custom php.ini file:
output_handler = Off
zlib.output_compression = On
zlib.output_handler = ob_gzhandler
Now this will take care of gzipping all PHP files.
Step 2: .htaccess Configuration
Add the following lines to the bottom of a .htaccess file in the root of your website.
RewriteEngine On
RewriteRule ^(.*\.js) gzip.php?type=js&file=$1
RewriteRule ^(.*\.css) gzip.php?type=css&file=$1
This will redirect all requests for .css
and .js
files through gzip.php
, which we will create in the next step.
Step 3: File Processing PHP Script
The following PHP script will inherently use the PHP compression you’ve already enabled and also add headers to your files take advantage of your client’s browser cache to make subsequent loads faster.
Create a file named gzip.php
in your website’s root and add the following lines to it:
Great! With these steps in place your css and javascript files will be processed by gzip.php
and output using PHP’s gzip compression library (zlib).
This method can be extended to more filetypes by adding to the allowed file types in gzip.php
and adding more lines to your .htaccess
file.
Share bookmarks says
Very great post. I just stumbled upon your weblog and wanted to say that I have really enjoyed surfing around your weblog posts. In any case I will be subscribing to your feed and I hope you write again very soon!
blfeigel says
I tried this out on a test site, but it made my browser level caching stop working and when I tried to remove it all my pages are redirecting to 404 pages. I can still get to the WordPress Dashboard and the homepage of the site, but that’s it. Other than deleting the code is there something special I have to do to turn this off?
Josh Hartman says
No, but it sounds like your server is probably caching your
.htaccess
file. By the time you get this reply everything will probably be back to normal for you, but if not try emptying your.htaccess
file and include only these WordPress rules:If the site is in a subdirectory, like
/wordpress/
, it should look like this:Also, don’t forget to clear your browser cache.
For gzip under WordPress you may want to try a caching plugins and also take a look at this Tuts+ article.