如何为PHP文件启用mod_deflate?

时间:2010-05-14 16:25:39

标签: php .htaccess gzip httpd.conf mod-deflate

我有一个Liquid Web VPS帐户,我已确保mod_deflate已安装并正在运行/活动。

我曾经通过PHP gzip我的css和js文件,以及我自己的PHP文件...但是,我现在尝试通过mod_deflate这样做,它似乎适用于所有文件除了PHP文件。 (Txt文件工作正常,css,js,静态HTML文件,只是通过PHP文件生成的任何内容。)我该如何解决这个问题?

(我使用了cPanel中“优化网站”下的“压缩所有内容”选项,它在主目录中创建了一个.htaccess文件(不是public_html,比那个高一级),文本与“压缩”完全相同除了图片“http://httpd.apache.org/docs/2.0/mod/mod_deflate.html上的例子”

之外的所有内容

.htaccess文件:

<IfModule mod_deflate.c>
    SetOutputFilter DEFLATE
    <IfModule mod_setenvif.c>
        # 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

        # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
        # the above regex won't work. You can use the following
        # workaround to get the desired effect:
        BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

        # Don't compress images
        SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
    </IfModule>

    <IfModule mod_headers.c>
        # Make sure proxies don't deliver the wrong content
        Header append Vary User-Agent env=!dont-vary
    </IfModule>
</IfModule>

6 个答案:

答案 0 :(得分:5)

自从我发布这个问题已经有一段时间了 - 我最终通过PHP.ini启用zlib压缩,因此zlib压缩PHP输出,而mod_deflate压缩其他所有内容。

我认为它不起作用的原因(mod_deflate没有压缩PHP输出)与运行CGI而不是Apache DSO的PHP有关...

答案 1 :(得分:2)

PHP文件通常提供text/html内容(尽管您也可以生成图像和几乎所有内容)。 PHP文件永远不会发送到客户端:它会被处理以生成内容(text/html或图像)。 你正在寻找gzip这个内容。

答案 2 :(得分:0)

您可以将zlib.output_compression = On添加到php.ini配置文件中。无论mod_deflate如何,这都会压缩输出。

答案 3 :(得分:0)

整个配置方式已过时。现在可以而且应该删除它:Netscape 4已经存在很长时间了,设置Vary: User-Agent会不必要地阻碍缓存。

您需要的唯一一个mod_deflate配置是为可压缩媒体类型启用deflate的一行,使用AddOutputFilter按扩展名选择可压缩文件,或AddOutputFilterByType通过返回{{1}选择它们}。

答案 4 :(得分:0)

您需要在目录部分之外移动mod_deflate指令。在mod_deflate

中为httpd.conf全局定义规则

答案 5 :(得分:0)

以防万一有同样问题的人到此结束。

我在服务器上打开了mod_deflate。从浏览器的响应标头中可以看到,文本,css和javascript文件已使用gzip压缩。 HTML文件未根据标题进行压缩。

原来是我的病毒防护。它正在拦截传入的HTTP请求,并且如果在响应中看到<html>标签,则会对其进行解压缩并将其自己的javascript作为其“ Web Antivirus”的一部分插入页面。它将从响应中剥离gzip标头并以未压缩的形式发送。

因此,服务器正确地压缩了所有内容,而我的防病毒软件却将其解压缩。