簡體   English   中英

防止PHP提供的zip文件上的mod_deflate

[英]Prevent mod_deflate on zip file served by PHP

我遇到一些麻煩阻止mod_deflate跳進這個場景:

  1. 用戶運行CodeIgniter(或任何其他重定向index.php的框架)
  2. mod_deflate處於活動狀態
  3. 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/

編輯:
提供拉鏈的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);

即使是艱難的所有答案都應該在合理的情況下完全有效(並且在提出問題之前進行了實際測試),我之所以無法指示Apache通過MIME-Type縮小文件的原因仍然未知。

我可以通過強制將以下指令放入腳本中來使其按預期工作

apache_setenv('no-gzip', 1);
ini_set('zlib.output_compression', 0);

我確實理解這是一個熱門補丁 ,並沒有解決問題的根源,但到目前為止還不夠。 由於還有其他人可能會遇到相同的標志,上面的代碼留在這里作為臟修復的參考。

你可以:

  • 使用已棄用的AddOutputFilterByType並僅指定您要過濾的內容類型; 要么
  • 使用更強大的mod_filter FilterProvider您可以提供一個規則,在響應標頭中找到zip內容類型( application/zip )時排除過濾器。

您可以使用mod_rewrite在Apache級別更改請求的mime類型

# Serve .zip request as zip-files
RewriteRule \.zip$ - [T=application/zip,E=no-gzip:1]

將它置於框架規則之上,但是這需要使DEFLATE依賴於mime類型而不是文件擴展名,就像使用<FilesMatch>

可能它與...一起很好地工作

AddOutputFilterByType DEFLATE text/html

而不是<FilesMatch>指令。

編輯: 添加了應該在.htaccess上下文中使用的L標志, 並通過no-gzip環境變量另外關閉DEFLATE。

試試這個(因為你的網址似乎以.zip結尾,它可能適合你):

<FilesMatch "\.(xml|txt|html|php)$">
   SetEnvIf Request_URI "\.zip$" no-gzip
   SetOutputFilter DEFLATE
</FilesMatch>

而不是使用

<FilesMatch "\.(xml|txt|html|php)$">
   SetOutputFilter DEFLATE
</FilesMatch>

使用此配置設置壓縮規則。

AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml application/x-javascript application/javascript

這樣,只有在content-type與上述指令匹配時,才會壓縮輸出。

為zip服務的CI控制器已經發送了正確的內容類型標頭,因此不會被壓縮。

header('Content-Type: application/zip');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM