3

I have a Liquid Web VPS account, I've made sure that mod_deflate is installed and running/active.

I used to gzip my css and js files via PHP, as well as my PHP files themselves... However, I'm now trying to do this via mod_deflate, and it seems to work fine for all files except for PHP files. (Txt files work fine, css, js, static HTML files, just nothing that is generated via a PHP file.) How do I fix this?

(I used the "Compress all content" option under "Optimize Website" in cPanel, which creates an .htaccess file in the home directory (not public_html, one level higher than that) with exactly the same text as the "compress everything except images" example on http://httpd.apache.org/docs/2.0/mod/mod_deflate.html)

.htaccess file:

<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>
4

6 回答 6

5

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

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

于 2010-05-25T02:10:05.480 回答
2

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

于 2010-05-14T16:30:50.117 回答
0

您可以添加zlib.output_compression = On到您的 php.ini 配置文件中。这将压缩输出而不管 mod_deflate。

于 2010-05-14T16:32:25.063 回答
0

整个配置已经过时了。它现在可以而且应该被删除:Netscape 4 已经很久没有出现了,并且Vary: User-Agent不必要的设置会阻碍缓存。

您需要的唯一 mod_deflate 配置是为可压缩媒体类型打开 deflate 的一行,或者使用AddOutputFilter通过扩展名选择可压缩文件,或者AddOutputFilterByType通过返回选择它们Content-Type

于 2010-05-14T16:57:08.743 回答
0

您需要将您的 mod_deflate 指令移到 Directory 部分之外。mod_deflate在您的全球范围内定义您的规则httpd.conf

于 2012-01-28T10:01:07.930 回答
0

以防万一有同样问题的人在这里结束。

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

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

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

于 2019-02-28T01:19:16.763 回答