У меня есть учетная запись 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>
Прошло некоторое время с тех пор, как я опубликовал этот вопрос – в итоге я включил сжатие zlib через PHP.ini, поэтому zlib сжимает вывод PHP, а mod_deflate сжимает все остальное.
Я думаю, причина, по которой он не работал (mod_deflate не сжимал вывод PHP) имеет отношение к PHP, работающему как CGI, а не к Apache DSO …
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 вне раздела Directory. Определите свои правила глобально для mod_deflate
в вашем httpd.conf