在Apache 2.4中,您可以尝试执行以下操作:
FileETag None
<IfModule mod_headers.c>
Header always unset ETag "expr=%{REQUEST_STATUS} == 404"
Header always set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" "expr=%{REQUEST_STATUS} == 404"
Header always set Pragma "no-cache" "expr=%{REQUEST_STATUS} == 404"
Header always set Expires "Wed, 11 Jan 1984 05:00:00 GMT" "expr=%{REQUEST_STATUS} == 404"
</IfModule>
always
之所以重要,是因为这是:
您正在向本地生成的非成功(非2xx)响应(例如重定向)添加标头,在这种情况下,最终响应中仅使用与always对应的表。
您说了所有404,但是为了完全参考,当然可以将其包装在<FilesMatch>
或<LocationMatch>
限制范围内。
我相信这是apache 2.4中的一项新功能,因为使用expr
条件语句不是mod_headers文档的2.2版本中的。
curl -I [foo]
在没有此配置的情况下进行测试:
HTTP/1.1 404 Not Found
Date: Thu, 24 May 2018 17:44:29 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Type: text/html; charset=iso-8859-1
curl -I [foo]
使用此配置进行测试:
HTTP/1.1 404 Not Found
Date: Thu, 24 May 2018 17:44:42 GMT
Server: Apache/2.4.18 (Ubuntu)
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Content-Type: text/html; charset=iso-8859-1
资料来源:
http://httpd.apache.org/docs/current/mod/mod_headers.html