Dot-Htaccess

Apache 伺服器 – 嘗試在 .htaccess 中使用 Location 指令

  • December 10, 2019

當在我的網站上呼叫特定路徑 (/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(到 value ),然後僅在設置該 env var(通過最後一個參數)時應用該指令。1``/foo/bar/``Header``env=NO_CACHE


或者,如果您使用的是 Apache 2.4+,那麼您可以使用Apache<If>表達式僅直接針對該 URL 路徑,無需設置 env var。例如:

<If "%{REQUEST_URI} =~ m#^/foo/bar/$#">
   Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</If>

另一種選擇,如果您使用的是 Apache 2.4.10+,那麼您可以直接在指令中使用Apache 表達式Header,以便僅針對該 URL 路徑。例如:

Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" "expr=%{REQUEST_URI} =~ m#^/foo/bar/$#"

引用自:https://serverfault.com/questions/995002