Creé un archivo htaccess para mi sitio web de Wordpress multisitio, que contiene las reglas de reescritura estándar seguidas de una sección mod_headers, con directivas FilesMatch condicionales.
Todos los encabezados http se aplican correctamente a los subdocumentos de cualquier página de Wordpress (por ejemplo, png, jpg, js, css, etc.), pero nunca se aplican al documento raíz. Otro sitio html puro en el mismo host recibe los encabezados correctamente.
Por ejemplo: https://www.somedomain.com/site.css devuelve:
HTTP/2 200 OK content-type: text/css date: Mon, 30 Mar 2020 09:36:10 GMT server: Apache x-content-type-options: nosniff last-modified: Sun, 29 Mar 2020 12:55:43 GMT etag: "14546d-5a1fdda3e88c5-gzip" accept-ranges: bytes cache-control: must-revalidate, public, max-age=31536000 expires: Sat, 20 Mar 2021 09:36:10 GMT vary: Accept-Encoding,User-Agent content-encoding: gzip pero https://www.somedomain.com/ solo devuelve:
HTTP/1.1 200 Connection established content-type: text/html; charset=UTF-8 date: Mon, 30 Mar 2020 09:36:09 GMT server: Apache x-powered-by: PHP/7.3.16 cache-control: no-cache content-encoding: gzipEl código htaccess está a continuación:
#BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] #add a trailing slash to /wp-admin RewriteRule ^wp-admin$ wp-admin/ [R=301,L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteRule ^(wp-(content|admin|includes).*) web/$1 [L] RewriteRule ^(.*\.php)$ web/$1 [L] RewriteRule . index.php [L] </IfModule> #END WordPress #BEGIN Headers <IfModule mod_headers.c> #Remove server headers Header always unset X-Redirect-By Header always unset X-Powered-By Header always unset Location #Set server headers Header always set X-Content-Type-Options nosniff Header append Vary "Accept-Encoding, User-Agent" #Set Cache-Control <FilesMatch "\.(ico|jpe?g|png|gif|svg|webp|swf|css|mp4)$"> Header set Cache-Control "must-revalidate, public, max-age=31536000" </FilesMatch> <FilesMatch "\.(js)$"> Header set Cache-Control "private" </FilesMatch> <FilesMatch "\.(php|x?html?|pdf|xlsx?|docx?|pptx?|zipx?)$"> Header set Cache-Control "private, must-revalidate" </FilesMatch> #PHP/HTML specific headers <FilesMatch "\.(php|x?html?)$"> Header always set X-Frame-Options "SAMEORIGIN" Header always set X-DNS-Prefetch-Control "on" Header always set Connection "keep-alive" Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set X-Clacks-Overhead "GNU Terry Pratchett" </FilesMatch> </IfModule> #END Headers