Отрицание в регулярном выражении
Как и обещал во время перерыва на мастер классах выкладываю решение:
Когда то, кажется после прочтения книги о клиентской оптимизации Николая Мациевского, у меня появилась задача: для устаревших браузеров, не поддерживающих gzip, создать в конфигурационном файле apache сервера правило:
все .css .js файлы, не имеющие в названии определенной части .ABC дополняются этим .ABC
Долго мучился в поисках решения, вспоминая при этом анекдот:
если у вас есть проблема и вы думаете, что ее можно решить через регулярные выражения, значит у вас уже есть две проблемы!
Собственно сам regexp:
((?:(?!\.ABC).)*)
Я его на практике использую так вот:
RewriteEngine On
# ... тут правило по вырезанию версии файла
RewriteCond %{HTTP:Accept-encoding} !gzip [OR]
RewriteCond %{HTTP_USER_AGENT} Konqueror
RewriteRule ^((?:(?!\.no-gzip).)*)\.(css|js)$ $1.no-gzip.$2 [QSA,L]
# далее ...
FilesMatch .*\.(js|css)$
Header set Content-Encoding: gzip
Header set Cache-control: private
/FilesMatch
FilesMatch .*\.no-gzip\.(js|css)$>
Header unset Content-Encoding
/FilesMatch
При этом отдельные .css .js файлы для IE 6-, подключаемые через CC, либо файлы очень маленького объема, сжимать которые не выгодно и не эффективно, изначально содержат в названии флаг .no-gzip
Надеюсь вам это пригодится!
P.S. Илья, еще раз спасибо за организацию и проведение мастер классов, ни разу не пожалел, всем советую!
|
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.