Apache FilesMatch - сопоставление папки в регулярном выражении
Я пытаюсь кэшировать некоторые файлы, используя файл.htaccess для Apache2. Я хочу кэшировать определенную папку дольше, чем что-либо еще, поэтому я пытался использовать директиву FilesMatch, например:
<FilesMatch "skins(.*)\.(jpg|png|gif)">
ExpiresDefault A2592000
</FilesMatch>
Я надеюсь, что смогу кэшировать все файлы изображений в каталоге / skins / и его подкаталогах. Тем не менее, я не могу заставить регулярное выражение работать - Apache просто игнорирует его.
Как вы сопоставляете папку с <FilesMatch>
в файле.htaccess?
Ура,
Matt
3 ответа
FilesMatch должен соответствовать только именам файлов, чтобы вы могли поместить файл.htaccess в каталог "скины", и он должен выглядеть примерно так:
<FilesMatch "\.(jpg|png|gif)">
ExpiresDefault A2592000
</FilesMatch>
или если в файле httpd.conf вы можете использовать,
<Directory path_to_the_skins_dir>
<FilesMatch "\.(jpg|png|gif)">
ExpiresDefault A2592000
</FilesMatch>
</Directory>
удачи
<Directory>
а также <Location>
не разрешены в.htaccess, но...
Ты можешь использовать <If>
что разрешено также в "контексте" .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 (если это имеет какое-то значение с вашей стороны), не уверен, почему сопоставление работает против этого…
#
это просто разные внешние " ворота " для регулярного выражения вместо /
(так как мне нужно использовать /
в буквальном смысле, спасает меня от побега).
Directory
а также Location
команды не работают в .htaccess
на многих серверах. Единственное решение - создать.htaccess в целевой подпапке и использовать FilesMatch
команда там.