我已经启动并运行了 mod_deflate。我可以在我的 apache 服务器中放入一个 something.txt 文件并使用 curl 来检查它。
curl --compressed -I /somefile.txt 给了我以下好的和压缩的:
Vary: Accept-Encoding
Content-Encoding: gzip
但如果我使用 /some.php 我会回来:
Accept-Ranges: bytes
X-Powered-By: PHP/5.4.4-14+deb7u5
但没有 Content-Encoding: gzip,我使用了多个选项的 .htaccess:
SetOutPutFilter DEFLATE
或者
AddOutputFilterByType DEFLATE application/json
我还检查了 php.ini 中的 zlib 压缩是否已关闭,并且还尝试将输出缓冲区设置为关闭。但无论我尝试什么,我都不会让 php 输出被 apache 压缩。从 apache 到 zip 的开销比我使用 php zlib 时要少。
我看到了足够多的帖子,例如Apache 输出压缩适用于 CSS/JS,但不适用于 PHP,但可以从 php 进行压缩。我希望 apache 来处理它。
我一定在这里遗漏了一些愚蠢的东西。
更新:我解决了所有问题,也是因为给出的答案。最后它仍然没有100%工作。这是由于安装了错误的软件包。使用了 apache2filter,它让我走错了路。
AddOutputFilterByType
是在输出过滤器链上添加东西的一种不推荐的方式(参考这里)。:您可能会遇到一些问题,因为 PHP 与一个不包含 DEFLATE 过滤器的过滤器链相关联。
您可以尝试将mod_filter的新语法与FilterChain一起使用,如本问题所示(在问题中,而不是在答案中)。
我遇到了这个问题,最终发现在 .htaccess 和 httpd.conf 中设置 mod_deflate 选项会导致不同的结果。当在 fastcgi 中运行或作为 DSO 运行时,httpd.conf 设置适用于 PHP。在 .htaccess 文件中,作为 fastcgi 运行的 PHP 无法理解 deflate 指令。
所以尝试在你的 httpd.conf 而不是 .htaccess 中编写规则,看看是否能解决你的问题(不要忘记在进行更改后重新启动 Apache)。
试试这个,看看它是否适合你: