我在阻止 mod_deflate 出现这种情况时遇到了一些麻烦:
- 运行 CodeIgniter(或任何其他重定向到 index.php 的框架)的用户
- mod_deflate 处于活动状态
- zip 文件由 CodeIgniter 控制器提供(标题 + 读取文件)
问题是 Apache 总是将内容检测为存在php
,因此像下面的行这样的东西不会起作用,因为服务器假定 ZIP 文件是 PHP 文件。
<FilesMatch "\.(xml|txt|html|php)$">
SetOutputFilter DEFLATE
</FilesMatch>
关于如何让 Apache 与由同一index.php
框架文件生成的 HTML 文件或 ZIP 文件区分开来的任何想法。
编辑:
apache日志
[Mon Jun 20 02:14:19 2011] [debug]
mod_deflate.c(602): [client 192.168.0.5]
Zlib: Compressed 50870209 to 50878224 : URL /index.php,
referer: http://demo.dev/
编辑:
为 zip 提供服务的 CI 控制器
header('Content-Type: application/zip');
header('Content-Transfer-Encoding: binary');
header("Content-Length: " . filesize($file_location));
header('Content-Disposition: attachment; filename="' . $file_title . '"');
readfile($file_location);