No apache 2.4, você pode tentar algo como:
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>
O always
é importante porque é um:
You're adding a header to a locally generated non-success (non-2xx) response, such as a redirect, in which case only the table corresponding to always is used in the ultimate response.
Você disse todos os 404s, mas para referência completa, é claro que pode fazer sentido agrupar isso em <FilesMatch>
ou <LocationMatch>
para limitar o escopo.
Acredito que este é um novo recurso no apache 2.4, pois o uso de expr
condicionais não é a versão 2.2 da documentação do mod_headers.
curl -I [foo]
test sem essa configuração:
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]
test com esta configuração:
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
Fontes:
link