当我的网站上调用特定路径 (/foo/bar/) 时,我需要删除所有缓存。我的托管支持告诉我应该在 .htaccess 中执行此操作,并且我尝试使用 Location 指令,如下所示:
<Location "/foo/bar/">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</Location>
但我得到的只是内部服务器错误。我是否遗漏了某些内容,或者是否应该将此指令放在 .htaccess 中的某个位置。我尝试了所有能想到的方法,但结果都一样。
答案1
正如前面提到的,文件<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 路径(仅)时设置环境变量NO_CACHE
(为值),并且仅在设置该环境变量(通过最后一个参数)时才应用该指令。1
/foo/bar/
Header
env=NO_CACHE
或者,如果你使用的是 Apache 2.4+,那么你可以使用Apache<If>
表达式直接定位该 URL 路径,无需设置环境变量。例如:
<If "%{REQUEST_URI} =~ m#^/foo/bar/$#">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</If>
另一种选择是,如果你使用的是 Apache 2.4.10+,那么你可以使用阿帕奇表达式直接在Header
指令中,以便仅针对该 URL 路径。例如:
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" "expr=%{REQUEST_URI} =~ m#^/foo/bar/$#"
答案2
根据Apache 文档,该指令根本Location
无法在文件中使用。您可以在服务器配置中使用,但文件始终引用文件所在的当前目录,因此为该文件中的另一个位置指定指令是没有意义的。.htaccess
Location
.htaccess
只需省略Location
指令,其Header
本身就应该适用于该目录/位置。