Apacheサーバー–.htaccessでLocationディレクティブを使用しようとしています
Webサイトで特定のパス(/ foo / bar /)が呼び出されたときに、すべてのキャッシュを削除する必要があります。私のマネージドホスティングサポートは、これを.htaccessで行う必要があることを教えてくれ、次のようにLocationディレクティブを使用しようとしました。
<Location "/foo/bar/">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</Location>
しかし、私が得るのは内部サーバーエラーだけです。何かを省略しましたか、それともこのディレクティブを.htaccessの特定の場所に配置する必要がありますか。私は考えられるすべてを試しましたが、同じ結果になりました。
回答
すでに述べたように、<Location>
ディレクティブは.htaccess
ファイルでは許可されていません。場合は/foo/bar/
、ファイルシステムのディレクトリに直接関係、あなたが置くことができます.htaccess
(ディレクティブ適用するために、そのディレクトリ内のファイルをHeader
この場合は)そのディレクトリに、以下のみを。
ただし、/foo/bar/
がURLパスのみ(<Location>
サーバーコンテキストでディレクティブが対象とするもの)であり、ファイルシステムに直接関係しない場合は、代わりに、そのURlパスにアクセスするときに環境変数を設定し、Header
その環境変数が設定されているかどうかに条件付きで基づいています。
例えば:
SetEnvIf Request_URI "^/foo/bar/$" NO_CACHE
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" env=NO_CACHE
上記は、URLパス(のみ)が要求されたときにenv varをNO_CACHE
(値に1
)設定し/foo/bar/
、Header
ディレクティブはそのenv varが(最後の引数によってenv=NO_CACHE
)設定されたときにのみ適用されます。
または、Apache 2.4以降を使用している場合は、Apache
<If "%{REQUEST_URI} =~ m#^/foo/bar/$#">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</If>
別の方法として、Apache 2.4.10以降を使用している場合は、そのURLパスのみをターゲットにするために、ディレクティブで直接Apache式を使用できますHeader
。例えば:
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" "expr=%{REQUEST_URI} =~ m#^/foo/bar/$#"
Apacheのドキュメントによると、このLocation
ディレクティブは.htaccess
ファイルではまったく使用できません。Location
サーバー構成で使用できますが、.htaccess
ファイルは常にファイルが存在する現在のディレクトリを参照するため、そのファイル内の別の場所にディレクティブを指定しても意味がありません。
Location
ディレクティブを省略するだけで、Header
それ自体がそのディレクトリ/場所で機能するはずです。