我有一个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>
自从我发布这个问题已经有一段时间了 - 我最终通过PHP.ini启用zlib压缩,因此zlib压缩PHP输出,而mod_deflate压缩其他所有内容。
我认为它不起作用的原因(mod_deflate不是压缩PHP输出)与运行CGI而不是Apache DSO的PHP有关...
PHP文件通常提供text/html
内容(尽管您也可以生成图像和几乎所有内容)。 PHP文件永远不会发送到客户端:它会被处理以生成内容(text/html
或图像)。你正在寻找gzip这个内容。
您可以将zlib.output_compression = On
添加到您的php.ini配置文件中。无论mod_deflate如何,这都将压缩输出。
整个配置已经过时了。现在可以而且应该删除它:Netscape 4已经存在很长时间了,设置Vary: User-Agent
会不必要地阻碍缓存。
您需要的唯一一个mod_deflate配置是为可压缩媒体类型打开deflate的一行,使用AddOutputFilter
按扩展名选择可压缩文件,或者AddOutputFilterByType
通过返回的Content-Type
选择它们。
您需要在目录部分之外移动mod_deflate指令。在mod_deflate
中为httpd.conf
全局定义规则
万一有相同问题的人最终会在这里结束。
我在服务器上打开了mod_deflate。我可以从浏览器的响应标题中看到text,css和javascript文件是用gzip压缩的。根据标题没有压缩Html文件。
事实证明这是我的病毒保护。它正在拦截传入的HTTP请求,如果它在响应中看到<html>
标记,它会解压缩并将其自己的javascript插入到页面中,作为其“Web Antivirus”的一部分。它会从响应中剥离gzip标头并将其解压缩。
所以,服务器正确地解压缩了一切,我的防病毒软件在它到达之前解压缩它。