Servidor Apache: intentando usar la directiva de ubicación en .htaccess
Necesito eliminar todo el almacenamiento en caché cuando se llama a una ruta específica (/ foo / bar /) en mi sitio web. Mi soporte de hosting administrado me dice que debería hacer esto en .htaccess y he intentado usar la directiva Location, así:
<Location "/foo/bar/">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</Location>
Pero todo lo que obtengo es un error interno del servidor. ¿Dejé algo fuera o debería colocar esta directiva en un lugar determinado en .htaccess? He probado todo lo que se me ocurre, con el mismo resultado.
Respuestas
Como ya se ha mencionado, la <Location>
directiva no está permitida en los .htaccess
archivos. Si se /foo/bar/
relaciona directamente con un directorio del sistema de archivos, puede colocar el .htaccess
archivo en ese directorio para aplicar las directivas ( Header
en este caso) a ese directorio y solo a continuación.
Sin embargo, si /foo/bar/
es solo una ruta de URL (que también es lo <Location>
que apunta la directiva en un contexto de servidor), que no se relaciona directamente con el sistema de archivos, entonces puede establecer una variable de entorno cuando se accede a esa ruta de URL y establecer el Header
condicionalmente en función de si se establece esa var env.
Por ejemplo:
SetEnvIf Request_URI "^/foo/bar/$" NO_CACHE
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" env=NO_CACHE
Lo anterior establece la var env NO_CACHE
(al valor 1
) cuando /foo/bar/
se solicita la ruta de URL (solo) y la Header
directiva solo se aplica cuando se establece esa var env (por el último argumento env=NO_CACHE
).
Alternativamente, si está en Apache 2.4+, puede usar expresiones de Apache
<If "%{REQUEST_URI} =~ m#^/foo/bar/$#">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</If>
Otra alternativa, si está en Apache 2.4.10+, puede usar una expresión de Apache directamente en la Header
directiva para apuntar solo a esa ruta de URL. Por ejemplo:
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" "expr=%{REQUEST_URI} =~ m#^/foo/bar/$#"
Según la documentación de Apache , la Location
directiva no se puede utilizar en ningún .htaccess
archivo. Puede usarlo Location
en la configuración del servidor, pero el .htaccess
archivo siempre se refiere al directorio actual en el que reside el archivo, por lo que especificar directivas para otra ubicación en ese archivo no tiene sentido.
Simplemente deje la Location
directiva, la Header
misma debería funcionar para ese directorio / ubicación.