2009-05-15 22 views
9

Estoy intentando almacenar en caché algunos archivos utilizando un archivo .htaccess para Apache2. Quiero almacenar en caché una carpeta particular, ya que cualquier otra cosa, por lo que he estado tratando de usar la directiva FilesMatch así:Apache FilesMatch: coincidencia de una carpeta en la expresión regular

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

Estoy esperando a ser capaz de almacenar en caché los archivos de imagen en el directorio/pieles/directorio y sus subdirectorios. Sin embargo, no puedo lograr que funcione la expresión regular: Apache simplemente lo ignora por completo.

¿Cómo se relaciona una carpeta con <FilesMatch> en un archivo .htaccess?

Cheers,
Matt

Respuesta

15

FilesMatch sólo debe coincidir con los nombres de archivo de modo Se puede colocar el archivo .htaccess dentro del directorio "pieles" y debe ser algo como,

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

o si en el archivo httpd.conf que podría utilizar,

<Directory path_to_the_skins_dir> 
    <FilesMatch "\.(jpg|png|gif)"> 
    ExpiresDefault A2592000 
    </FilesMatch> 
</Directory> 

buena suerte

+0

Muchas gracias por su ayuda. Buscaré los múltiples archivos .htaccess para guardar cambiando el httpd.conf principal. Gracias de nuevo, Matt – fistameeny

3

Directory y Location comandos no funcionan en .htaccess en muchos servidores. La única solución es crear .htaccess en la subcarpeta de destino y usar allí el comando FilesMatch.

0

<Directory> y <Location> están permitido en .htaccess, pero ...

Usted puede utilizar <If> cuales is allowed also in the “Context“ .htaccess (no sólo httpd.conf) ... También see here. Se le permite hacer coincidir para una ruta de la base y una extensión y cualquier otra cosa, una expresión regular puede captar ...

probado y trabajo:

<If "%{REQUEST_URI} =~ m#^/_stats/.*\.(jpg|png|css|js)#"> 
    Header unset ETag 
    FileETag None 

    ExpiresActive On 
    ExpiresDefault "access plus 1 day" 
</If> 

Notas: _stats es mi reescritura de URL , no la URL entrante (si eso hace alguna diferencia en su extremo), no estoy seguro, por qué la coincidencia funciona en contra de eso ...

# es solo una diferencia ent fuera de "puerta" para una expresión regular en lugar de / (ya que necesito usar / en su sentido literal, me ahorra algo de escape).

Cuestiones relacionadas