2011-10-18 13 views
10

Quiero establecer de manera condicional los encabezados de caché dependiendo de a qué ruta se accede desde los archivos. Básicamente, al acceder al http://www.example.com/cache/$cache_key/*, se deben mostrar los archivos que tengan lejos en el futuro los encabezados de la memoria caché.Configurar condicionalmente los encabezados de caché en apache

Estoy usando una regla de reescritura para establecer una variable de entorno y luego intentar establecer encabezados de control de caché basados ​​en esa variable. Sin embargo, parece que la variable se está configurando demasiado tarde en el proceso o algo así; las reglas de encabezado condicional nunca se ejecutan.

RewriteRule ^cache/.*?/(.*) /$1 [env=asset:true,L] 
Header set Cache-control "max-age=30" 
Header set Cache-Control "max-age=31536000" env=asset 
Header unset ETag env=asset 

¿Hay una manera mejor de hacer esto? Intenté un par de combinaciones de bloques de Directorio y Ubicación sin éxito.

Respuesta

19

Utilicé phpinfo() Decidí que la variable de entorno no se configuraba en absoluto en la solicitud reescrita, por lo que el problema no es el orden de la solicitud, sino que parece arrojar la variable. Usar la cadena de consulta en lugar de la URL y no reescribir parecía ser la única forma en que podía hacer que esto funcionara. Estoy de acuerdo, parece que debería ser una mejor manera.

RewriteCond %{QUERY_STRING} longcache=true(&|$) 
RewriteRule .* - [ENV=LONGCACHE:true,L] 

Header set Cache-Control "max-age=30" env=!LONGCACHE 
Header set Cache-Control "max-age=31536000" env=LONGCACHE 

MÁS respuesta diferente OBTENIDO POR LOS OJOS DE APERTURA:

la variable de entorno asset se cambió el nombre a REDIRECT_asset después de la redirección, por lo que su directiva de cabecera condicional tiene que ser:

Header set Cache-Control "max-age=31536000" env=REDIRECT_asset 
+1

Sí, eso fue, REDIRECT_asset, gracias por él. – regilero

+0

Gracias, de alguna manera me perdí que esto fue respondido. – mike

Cuestiones relacionadas