Apache FilesMatch - сопоставление папки в регулярном выражении
Я пытаюсь кэшировать некоторые файлы, используя файл .htaccess для Apache2. Я хочу кэшировать конкретную папку дольше, чем что-либо еще, поэтому я пытался использовать директиву FilesMatch следующим образом:
<FilesMatch "skins(.*)\.(jpg|png|gif)">
ExpiresDefault A2592000
</FilesMatch>
Я надеюсь, что вы сможете кэшировать все файлы изображений в каталоге/skins/и подкаталогах. Однако я не могу заставить регулярное выражение работать - Apache просто игнорирует его вообще.
Как вы сопоставляете папку с <FilesMatch>
в файле .htaccess?
Cheers,
Matt
Ответы
Ответ 1
FilesMatch должен соответствовать только именам файлов. Вы можете поместить файл .htaccess
в каталог skins
, и он должен выглядеть примерно так:
<FilesMatch "\.(jpg|png|gif)">
ExpiresDefault A2592000
</FilesMatch>
В качестве альтернативы, в httpd.conf
вы можете использовать:
<Directory path_to_the_skins_dir>
<FilesMatch "\.(jpg|png|gif)">
ExpiresDefault A2592000
</FilesMatch>
</Directory>
Удачи.
Ответ 2
Команды Directory
и Location
не работают в .htaccess
на многих хостингах. Решением может быть создание .htaccess
в целевой FilesMatch
и использование FilesMatch
команды FilesMatch
.
Ответ 3
<Directory>
и <Location>
запрещены в .htaccess, но...
Вы можете использовать <If>
что также разрешено в "Context" .htaccess
(не только httpd.conf)… также смотрите здесь. Он позволяет вам найти базовый путь, расширение и все остальное, что может понять RegExp…
Проверено и работает:
<If "%{REQUEST_URI} =~ m#^/_stats/.*\.(jpg|png|css|js)#">
Header unset ETag
FileETag None
ExpiresActive On
ExpiresDefault "access plus 1 day"
</If>
Примечания: _stats
- это мой URL перезаписи, а не входящий URL (если это имеет какое-то значение с вашей стороны), я не уверен, почему сопоставление работает против этого…
#
- это просто другой внешний "гейт", обозначающий регулярное выражение, вместо использования /
чтобы пометить его как регулярное выражение. (Поскольку мне нужно использовать /
в буквальном смысле этого слова, это избавляет меня от необходимости избегать /
).