Apache-Server - versucht, die Location-Direktive in .htaccess zu verwenden

Dec 10 2019

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

2 MrWhite Dec 10 2019 at 19:08

Wie bereits erwähnt, ist die <Location>Richtlinie in .htaccessDateien nicht zulässig . Wenn es /foo/bar/sich direkt auf ein Dateisystemverzeichnis bezieht, können Sie die .htaccessDatei in diesem Verzeichnis ablegen, um die Anweisungen ( Headerin 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 Headerbedingt 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 HeaderDirektive 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- Ausdrücke verwenden, um nur auf diesen URL-Pfad direkt abzuzielen, sodass keine env-Variable festgelegt werden muss. Zum Beispiel:

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

Laut der Apache-Dokumentation kann die LocationDirektive überhaupt nicht in .htaccessDateien verwendet werden. Sie können Locationin der Serverkonfiguration verwenden, aber die .htaccessDatei 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 LocationDirektive weg, die Headerselbst sollte für dieses Verzeichnis / diesen Speicherort funktionieren.