簡體   English   中英

如何為PHP文件啟用mod_deflate?

[英]How do I enable mod_deflate for PHP files?

我有一個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模塊配置是一條線把放氣的可壓縮的媒體類型,或者使用AddOutputFilter選擇通過擴展壓縮的文件,或AddOutputFilterByType由歸國選擇其中Content-Type

以防萬一有同樣問題的人到此為止。

我在服務器上打開了mod_deflate。 從瀏覽器的響應標頭中可以看到,文本,css和javascript文件已使用gzip壓縮。 不會根據標題壓縮HTML文件。

原來那是我的病毒防護。 它正在攔截傳入的HTTP請求,並且如果在響應中看到<html>標簽,它將對其進行解壓縮並將其自己的javascript作為其“ Web Antivirus”的一部分插入頁面。 它將從響應中剝離gzip標頭,並以未壓縮的形式傳遞。

因此,服務器正確地壓縮了所有內容,而我的防病毒軟件卻在將其解壓縮之前將其解壓縮。

您需要將mod_deflate指令移至“目錄”部分之外。 httpd.confmod_deflate全局定義規則

暫無
暫無

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

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