How to make gzip work on 1and1 shared host WordPress site
.htaccess, gzip, wordpress
Solution
So, after a while I figured out how to compress html, css and js files having a 1&1 Webhosting package. Deflate is not supported!
For the dynamic content you add php.ini to your root directory of your website. Content of php.ini:
zlib.output_compression =1
zlib.output_compression_level =9
Of course you can also choose another compression level, 9 is the highest (and causing the highest server load). That will compress your the dynamically generated html file.
To compress static files (css, js and images...) you need to modify the .htaccess file. For that append
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteOptions Inherit
ReWriteCond %{HTTP:accept-encoding} (gzip.*)
ReWriteCond %{REQUEST_FILENAME} !.+\.gz$
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.+) $1.gz [QSA,L]
</IfModule>
to your .htaccess file (you find that file in the root directory of your website - else create it). But the compression is not done automatically. So you have to compress the files on your own! Use e.g. 7-zip and compress the js and css files with .gz -> the result should be e.g. stylesheet.css.gz. Then upload the file to the same directory as the file you just compressed.
Now it should work!
PS: compression is not always useful especially when the file is very small. So check the differences before and after compression.
Problem
YSlow is telling me that my css should be compressed, but after several hours of tinkering, I cannot for the life of me get gzip to work for my website. At this point, I'm not even sure if the performance increase (will there be one?) will be worth the effort. I'm running a WordPress site on a 1&1 shared hosting account. Honestly, I don't really know what I'm doing with this stuff, and can't seem to get an appropriate setup. I read in a few places that with 1&1, "modules Apache mod_deflate and mod_gzip are not installed.", so I assume this is part of the problem. I have tried the following code: This one doesn't seem to do anything: ``` <IfModule mod_gzip.c> mod_gzip_on Yes mod_gzip_dechunk Yes mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$ mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include mime ^text\.* mod_gzip_item_include mime ^application/x-javascript.* mod_gzip_item_exclude mime ^image\.* mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* </IfModule> ``` This causes a 500 error ``` <Location /> # Insert filter SetOutputFilter DEFLATE # Netscape 4.x has some problems... BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Don't compress images SetEnvIfNoCase Request_URI \ \.(?:gif|jpe?g|png)$ no-gzip dont-vary # Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary </Location> ``` This (from html5 boilerplate) doesn't seem to do anything either: ``` <IfModule mod_deflate.c> # Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/ <IfModule mod_setenvif.c> <IfModule mod_headers.c> SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding </IfModule> </IfModule> # HTML, TXT, CSS, JavaScript, JSON, XML, HTC: <IfModule filter_module> FilterDeclare COMPRESS FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $image/x-icon FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype FilterChain COMPRESS FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no </IfModule> <IfModule !mod_filter.c> # Legacy versions of Apache AddOutputFilterByType DEFLATE text/html text/plain text/css application/json AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE text/xml application/xml text/x-component AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype </IfModule> </IfModule> ``` This one Doesnt seem to do anything... ``` AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript ``` I followed the tutorial found here ``` (http://mrrena.blogspot.com/2009/01/how-to-compress-php-and-other-text.html) ``` but this essentially completely broke the appearance of my site. Tried this in my Functions.php, and it seemed to compress my html, but leaves some js and css uncompressed ``` if(extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler")) add_action('wp', create_function('', '@ob_end_clean();@ini_set("zlib.output_compression", 1);')); ```