Как включить mod_deflate для файлов PHP? - PullRequest
1 голос
/ 14 мая 2010

У меня есть учетная запись Liquid Web VPS, я убедился, что mod_deflate установлен и работает / активен.

Я использовал gzip для своих файлов css и js через PHP, а также для самих файлов 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>

Ответы [ 6 ]

5 голосов
/ 25 мая 2010

Прошло много времени с тех пор, как я опубликовал этот вопрос - в итоге я включил сжатие zlib через PHP.ini, поэтому zlib сжимает вывод PHP, а mod_deflate сжимает все остальное.

Я думаю, что причина, по которой он не работал (mod_deflate не сжимал вывод PHP) связана с PHP, работающим как CGI, а не с Apache DSO ...

2 голосов
/ 14 мая 2010

PHP-файлы обычно обслуживают text/html контент (хотя вы также можете создавать изображения и почти все). Файлы PHP никогда не отправляются клиенту: он обрабатывается для генерации контента (text/html или изображений). Вы ищите этот контент.

0 голосов
/ 28 февраля 2019

На случай, если кто-то с такой же проблемой окажется здесь.

Я включил mod_deflate на моем сервере. Из заголовков ответов в моем браузере я мог видеть, что файлы text, css и javascript сжимаются с помощью gzip. HTML-файлы не были сжаты в соответствии с заголовками.

Оказывается, это была моя защита от вирусов. Он перехватывал входящий HTTP-запрос, и если он видел в ответе теги <html>, он распаковывал его и вставлял свой собственный javascript на страницу как часть своего «Веб-антивируса». Он удалит заголовок gzip из ответа и доставит его без сжатия.

Итак, сервер все правильно распаковывал, и мой антивирус распаковывал его до того, как он до меня добрался.

0 голосов
/ 28 января 2012

Вам необходимо переместить ваши директивы mod_deflate за пределы раздела Directory. Определите ваши правила глобально для mod_deflate в вашем httpd.conf

0 голосов
/ 14 мая 2010

Вся эта конфигурация way устарела. Его можно и нужно удалить сейчас: Netscape 4 давно не существует, а установка Vary: User-Agent излишне затрудняет кеширование.

Единственная конфигурация mod_deflate, которая вам нужна, - это одна строка, чтобы включить deflate для типов сжимаемых носителей, используя AddOutputFilter для выбора сжимаемых файлов по расширению или AddOutputFilterByType для выберите их, вернувшись Content-Type.

0 голосов
/ 14 мая 2010

Вы можете добавить zlib.output_compression = On в файл конфигурации php.ini. Это сжимает вывод независимо от mod_deflate.

...