Apache-Server - versucht, die Location-Direktive in .htaccess zu verwenden
Ich muss das gesamte Caching entfernen, wenn ein bestimmter Pfad (/ foo / bar /) auf meiner Website aufgerufen wird. Mein Managed Hosting-Support sagt mir, dass ich dies in .htaccess tun soll, und ich habe versucht, die Location-Direktive wie folgt zu verwenden:
<Location "/foo/bar/">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</Location>
Aber alles was ich bekomme ist ein interner Serverfehler. Habe ich etwas ausgelassen oder sollte diese Richtlinie an einer bestimmten Stelle in .htaccess platziert werden? Ich habe alles versucht, was mir einfällt, mit dem gleichen Ergebnis.
Antworten
Wie bereits erwähnt, ist die <Location>
Richtlinie in .htaccess
Dateien nicht zulässig . Wenn es /foo/bar/
sich direkt auf ein Dateisystemverzeichnis bezieht, können Sie die .htaccess
Datei in diesem Verzeichnis ablegen, um die Anweisungen ( Header
in diesem Fall) nur auf dieses Verzeichnis und darunter anzuwenden .
Wenn /foo/bar/
es sich jedoch nur um einen URL-Pfad handelt (auf den die <Location>
Direktive in einem Serverkontext abzielt), der sich nicht direkt auf das Dateisystem bezieht, können Sie stattdessen eine Umgebungsvariable festlegen, wenn auf diesen URl-Pfad zugegriffen wird, und den festlegen Header
bedingt abhängig davon, ob diese env var gesetzt ist.
Zum Beispiel:
SetEnvIf Request_URI "^/foo/bar/$" NO_CACHE
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" env=NO_CACHE
Das Obige setzt die env var NO_CACHE
(auf den Wert 1
), wenn der URL-Pfad /foo/bar/
(nur) angefordert wird, und die Header
Direktive wird dann nur angewendet, wenn diese env var gesetzt ist (durch das letzte Argument env=NO_CACHE
).
Wenn Sie Apache 2.4+ verwenden, können Sie alternativ Apache-
<If "%{REQUEST_URI} =~ m#^/foo/bar/$#">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</If>
Eine andere Alternative, wenn Sie mit Apache 2.4.10+ arbeiten, können Sie einen Apache-Ausdruck direkt in der Header
Direktive verwenden, um nur auf diesen URL-Pfad abzuzielen . Zum Beispiel:
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" "expr=%{REQUEST_URI} =~ m#^/foo/bar/$#"
Laut der Apache-Dokumentation kann die Location
Direktive überhaupt nicht in .htaccess
Dateien verwendet werden. Sie können Location
in der Serverkonfiguration verwenden, aber die .htaccess
Datei bezieht sich immer auf das aktuelle Verzeichnis, in dem sich die Datei befindet. Daher ist es sinnlos, Anweisungen für einen anderen Speicherort in dieser Datei anzugeben.
Lassen Sie einfach die Location
Direktive weg, die Header
selbst sollte für dieses Verzeichnis / diesen Speicherort funktionieren.