Некоторые файлы CSS и JS не сжимаются apache с включенным mod_deflate. Эти файлы выглядят так: "[domain.name] /aggregator.css? ..." или "[domain.name] /misc/jquery.js? ..." в YSlow. Другой CSS и JS без "?" сжимается. Пожалуйста, объясните мне, как заставить apache сжимать и эти файлы.
Я добавил следующую строку в файл .htaccess
<IfModule mod_deflate.c>
<FilesMatch "\.(css|js|x?html?|php)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>
Спасибо
Хм, интересно. Я не могу воспроизвести это:
[root@dev ~]# cat /etc/httpd/conf.d/test.conf
<FilesMatch "\.txt$">
SetOutputFilter DEFLATE
Header set X-Ping "Pong"
</FilesMatch>
[root@dev ~]# GET -SedH 'Accept-Encoding: gzip, deflate' 'http://localhost/test.txt'
GET http://localhost/test.txt --> 200 OK
Content-Encoding: gzip
Content-Length: 2449
X-Ping: Pong
[root@dev ~]# GET -SedH 'Accept-Encoding: gzip, deflate' 'http://localhost/test.txt?foo'
GET http://localhost/test.txt?foo --> 200 OK
Content-Encoding: gzip
Content-Length: 2449
X-Ping: Pong
(не связанные заголовки удалены)
Как уже упоминалось выше, FilesMatch
Спички файловая система пути, а не URI. Являются ли ресурсы, которые не являются сжатыми файлами в файловой системе, или они генерируются на лету, или проксируются, или перенаправляются, или что-то еще, что нарушает прямое сопоставление URI-файловой системы? Вы можете попробовать использовать LocationMatch вместо этого, что, вероятно, в любом случае лучше, если какая-либо часть вашего приложения не является статическими файлами.
<IfModule mod_deflate.c>
<LocationMatch "\.(css|js|x?html?|php)$">
SetOutputFilter DEFLATE
</LocationMatch>
</IfModule>
Символ $ в конце вашего регулярного выражения будет соответствовать концу URL-адреса, поэтому, если после расширения файла есть что-то, оно не будет совпадать. Вы можете опустить $, но тогда он будет соответствовать, если в URL-адресе есть «.css» и т. Д. Что-то вроде приведенного ниже примера может быть безопаснее. Это должно соответствовать либо «.css» в конце URL-адреса, либо «.css», за которым следует?, Некоторые параметры, а затем конец URL-адреса.
<IfModule mod_deflate.c>
<FilesMatch "\.(css|js|x?html?|php)($|\?.*$)">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>