Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

apache .gz gzip content handler for Linux documentation /usr/share/doc and localhost/doc/

How could I create a simple content handler for apache .gz gzip content. I want it to uncompress say http://localhost/doc/FAQ/Linux-FAQ.gz and send it to the browser as plain text. There is a lot of documentation for Linux in /usr/share/doc and localhost/doc/. I don't want to use zless, zcat or vim to read the content. I use apache to browse the documentation on my local machine and have my web browser revive it as standard text so that it does not ask me to download the *.gz file every time.

Alias /doc/ "/usr/share/doc/"
Alias local.doc "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

But Now I want all those .gz file under /usr/share/doc/ to be servered as plain text. I think I could do that very simply with a python script in cgi-bin. I am looking for a nice content handler for those files. Like the way it php files are handled .gz should be uncompressed and sent to the browser.

<IfModule mod_php5.c>
  AddType application/x-httpd-php .php .phtml .php3
  AddType application/x-httpd-php-source .phps
</IfModule>
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

I see there is a mod_deflate, how would this apply. Could this handle the gzip content.

It would make browsing documentation so much easier. Any programing resources to help here would be nice.

like image 466
nelaaro Avatar asked Mar 09 '11 06:03

nelaaro


1 Answers

I've used something like this before for js/css files (I modified the below to match your needs). Add this to your virtualhost entry:

Alias /doc/ "/usr/share/doc/"
Alias local.doc "/usr/share/doc/"
<Directory /usr/share/doc>
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128

    AddEncoding gzip gz
    <FilesMatch "\.gz$">
      ForceType text/plain
      Header set Content-Encoding: gzip
    </FilesMatch>
</Directory>

Updated above to match your code

In ubuntu ensure that Headers module is enabled

$ sudo a2enmod headers  
$ sudo a2enmod deflate
$ sudo apache2ctl restart

Update2: Realized that "AddEncoding gzip gz" was missing.. otherwise, file kept trying to download.

Update3: Added apache module deflate install command. Here's my deflate.conf:

<IfModule mod_deflate.c>
      # these are known to be safe with MSIE 6
      AddOutputFilterByType DEFLATE text/html text/plain text/xml

      # everything else may cause problems with MSIE 6
      AddOutputFilterByType DEFLATE text/css
      AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
      AddOutputFilterByType DEFLATE application/rss+xml
</IfModule>

You could first try with some other type of file (e.g. a css file). Example:

cd /usr/share/doc
cat ".styles { width: 50px; }" > test.css
gzip -c test.css > test.css.gz

Add this to your virtualhost:

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

Test http://127.0.0.1/doc/test.css and http://127.0.0.1/doc/test.css.gz and see what result you get.

like image 147
Dolan Antenucci Avatar answered Oct 19 '22 00:10

Dolan Antenucci