Apache FilesMatch - сопоставление папки в регулярном выражении - PullRequest
11 голосов
/ 15 мая 2009

Я пытаюсь кэшировать некоторые файлы, используя файл .htaccess для Apache2. Я хочу кэшировать определенную папку дольше, чем что-либо еще, поэтому я пытался использовать директиву FilesMatch, например:

<FilesMatch "skins(.*)\.(jpg|png|gif)"><br> ExpiresDefault A2592000<br> </FilesMatch>

Я надеюсь, что смогу кэшировать все файлы изображений в каталоге / skins / и его подкаталогах. Однако я не могу заставить регулярное выражение работать - Apache просто игнорирует его.

Как вы сопоставляете папку с <FilesMatch> в файле .htaccess?

Приветствия
Matt

Ответы [ 3 ]

18 голосов
/ 16 мая 2009

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>

удачи

5 голосов
/ 22 августа 2016
Команды

Directory и Location не работают в .htaccess на многих хостингах. Решением может быть создание .htaccess в целевой подпапке и использование там команды FilesMatch.

3 голосов
/ 20 декабря 2017

<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 (если это имеет какое-то значение с вашей стороны), я не уверен, почему сопоставление работает против этого ...

# - это просто другое внешнее « gate » для регулярного выражения вместо / (поскольку мне нужно использовать / в буквальном смысле, это спасает меня от побега).

...