Почему Apache не распаковывает файлы css или js с параметрами?
8
Некоторые файлы CSS и JS не сжимаются apache с включенной mod_deflate. Эти файлы выглядят как "[domain.name] /aggregator.css? ..." или "[domain.name] /misc/jquery.js? ..." в YSlow. Другой CSS & JS без "?" сжимается. Пожалуйста, объясните мне, как я могу заставить apache сжимать эти файлы.
[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 , который, в любом случае, лучше подойдет, если какая-либо часть вашего приложения не является статическим файлом.
Спасибо Марк за ответ. Ваше решение, кажется, работает.
Что-то должно быть включено, чтобы LocationMatch работал? Я попытался использовать это решение, и оно вызывает внутреннюю ошибку, но FileMatch работает ...
Пол Шелдрейк
Нет, они оба являются частью серверного ядра. Откройте другой вопрос с помощью своего фрагмента конфигурации и сообщения об ошибке, и мы посмотрим.
Маркдрайтон
1
+1 за набор заголовков X-Ping «Понг»
Эдди Б
это ответ кеша или он будет gzip при каждом последующем запросе к одному и тому же файлу js / css?
amit patel
0
$ В конце вашего регулярного выражения будет соответствовать концу URL, поэтому, если после расширения файла есть что-то, оно не будет совпадать. Вы можете опустить $, но тогда он будет совпадать, если где-то в URL есть «.css» и т. Д. Что-то вроде примера ниже может быть безопаснее. Это должно соответствовать либо «.css» в конце URL-адреса, либо «.css» с последующим?, Некоторыми параметрами, а затем концом URL-адреса.
Я не думаю, что это правильно. FilesMatch соответствует имени файла файловой системы, а не URI. LocationMatch совпадает с URI (но даже это смотрит только на URI, а не на строку запроса).
$ В конце вашего регулярного выражения будет соответствовать концу URL, поэтому, если после расширения файла есть что-то, оно не будет совпадать. Вы можете опустить $, но тогда он будет совпадать, если где-то в URL есть «.css» и т. Д. Что-то вроде примера ниже может быть безопаснее. Это должно соответствовать либо «.css» в конце URL-адреса, либо «.css» с последующим?, Некоторыми параметрами, а затем концом URL-адреса.
источник