Servidor Apache: intentando usar la directiva de ubicación en .htaccess

Dec 10 2019

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

2 MrWhite Dec 10 2019 at 19:08

Como ya se ha mencionado, la <Location>directiva no está permitida en los .htaccessarchivos. Si se /foo/bar/relaciona directamente con un directorio del sistema de archivos, puede colocar el .htaccessarchivo en ese directorio para aplicar las directivas ( Headeren 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 Headercondicionalmente 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 Headerdirectiva 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 para apuntar directamente solo a esa ruta de URL, eliminando la necesidad de establecer una var env. Por ejemplo:

<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 Headerdirectiva 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/$#"
Lacek Dec 10 2019 at 16:50

Según la documentación de Apache , la Locationdirectiva no se puede utilizar en ningún .htaccessarchivo. Puede usarlo Locationen la configuración del servidor, pero el .htaccessarchivo 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 Locationdirectiva, la Headermisma debería funcionar para ese directorio / ubicación.