xampp 默认完全不启用 gzip 压缩,必须手动启用 mod_deflate、mod_filter 和 mod_headers 三个模块(取消 httpd.conf 中对应 loadmodule 行的注释),在 httpd.conf 末尾添加按 mime 类型配置的 addoutputfilterbytype 规则,关闭 php.ini 中 zlib.output_compression,并重启 apache 才能生效。

XAMPP 默认完全不启用 Gzip 压缩,mod_deflate 模块被注释掉,不手动启用它,后续所有配置都无效——哪怕你写了十遍 AddOutputFilterByType,浏览器 Network 面板也永远看不到 Content-Encoding: gzip。
确认并启用 mod_deflate、mod_filter、mod_headers 三个模块
只开 mod_deflate 不够。XAMPP 的 Apache 依赖 mod_filter 接入响应流,mod_headers 用于加 Vary: Accept-Encoding 头(否则 CDN 或代理可能缓存错版本)。
- 打开
C:\xampp\apache\conf\httpd.conf(Windows)或/Applications/XAMPP/xamppfiles/etc/httpd.conf(macOS) - 搜索
mod_deflate.so,删掉这行开头的#:LoadModule deflate_module modules/mod_deflate.so - 同样处理这两行:
LoadModule filter_module modules/mod_filter.so、LoadModule headers_module modules/mod_headers.so - 保存后,必须通过 XAMPP Control Panel 点 Stop → Start(仅 Restart 或刷新页面无效)
- 验证是否生效:在浏览器访问
http://localhost/server-info(需先在httpd.conf中启用mod_info),看 “Loaded Modules” 列表里是否有这三个模块
AddOutputFilterByType DEFLATE 必须按实际 Content-Type 配置,不是文件后缀
Apache 压缩触发依据是响应头里的 Content-Type,不是 URL 后缀。比如一个 .js 文件由 PHP 输出且没设 header,它可能返回 text/plain,而你只配了 application/javascript,那它就不会被压。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 在
httpd.conf文件末尾追加(不是.htaccess,XAMPP 默认AllowOverride None,.htaccess 根本不读): <ifmodule mod_deflate.c></ifmodule>AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript application/json application/xml<ifmodule mod_headers.c></ifmodule>Header append Vary Accept-Encoding- 别写
text/javascript或application/x-javascript——现代 JS 应该用application/javascript;漏配就等于 JS 白压 - 别加
application/x-httpd-php——PHP 层若开了zlib.output_compression = On(默认常为 On),会和 Apache 冲突,导致压缩跳过或报错
验证失败时优先排查这三件事
看到响应头没 Content-Encoding: gzip,90% 不是规则写错,而是环境干扰。
-
Apache没真正重启:Control Panel 显示 “Running” ≠ 新配置已加载,必须 Stop 再 Start -
php.ini中zlib.output_compression = On:它会在 PHP 层提前压缩并输出Content-Encoding头,Apache 会放弃二次压缩;改成Off并重启 Apache - 浏览器缓存了未压缩响应:强制刷新(
Ctrl+F5)或清空缓存再测;对比 Network 面板里 Size 列 —— 从 12KB 变成 3KB 才算真生效 - 额外注意:如果用了多端口(如
<virtualhost></virtualhost>),<ifmodule></ifmodule>块要放在对应<virtualhost></virtualhost>内,否则规则不生效
最容易被忽略的是 mod_filter 和 mod_headers 没一起启用,以及 php.ini 里 zlib.output_compression 还开着——这两个点不处理,mod_deflate 就像装了发动机却没接传动轴,转不起来。










