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 команда там.

Другие вопросы по тегам