Nous utilisons ExpressionEngine en tant que système de gestion de contenu. Il vous permet de définir le "type" du fichier lorsque vous créez un modèle et lorsque vous le nommez, vous n'avez pas à lui donner une extension.
J'ai utilisé cela pour configurer le contrôle du cache, mais cela ne fonctionne pas sur beaucoup de mes fichiers javascript et css car ils ne possèdent pas les extensions .css et .js. Y at-il un moyen de le faire fonctionner sur le type?
<IfModule mod_expires.c>
# Enable expirations
ExpiresActive On
# Default directive
ExpiresDefault "access plus 1 month"
# My favicon
ExpiresByType image/x-icon "access plus 1 year"
# Images
ExpiresByType image/gif "access plus 6 months"
ExpiresByType image/png "access plus 6 months"
ExpiresByType image/jpg "access plus 6 months"
ExpiresByType image/jpeg "access plus 6 months"
# CSS
ExpiresByType text/css "access plus 4 months"
# Javascript
ExpiresByType application/javascript "access plus 6 months"
</IfModule>
<IfModule mod_deflate.c>
# Force compression for mangled headers.
# http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
# Compress all output labeled with one of the following MIME-types
# (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
# and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
# as `AddOutputFilterByType` is still in the core directives).
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml \
application/javascript \
application/json \
application/rss+xml \
application/vnd.ms-fontobject \
application/x-font-ttf \
application/x-web-app-manifest+json \
application/xhtml+xml \
application/xml \
font/opentype \
image/svg+xml \
image/x-icon \
text/css \
text/html \
text/javascript \
text/plain \
text/x-js \
text/x-component \
text/xml
</IfModule>
</IfModule>
#
# configure mod_headers
#
# URL: http://httpd.Apache.org/docs/2.2/mod/mod_headers.html
#
<IfModule mod_headers.c>
<FilesMatch "\\.(ico|jpe?g|png|gif|swf|css|js)$">
Header set Cache-Control "max-age=2692000, public"
</FilesMatch>
<FilesMatch "\\.(x?html?|php)$">
Header set Cache-Control "max-age=600, private, must-revalidate"
</FilesMatch>
Header unset ETag
Header unset Last-Modified
</IfModule>
Par "type", je suppose que vous entendez le type mime , auquel cas vous devriez regarder mod_expires et la directive ExpiresByType
- c’est sans aucun doute le moyen le plus simple/moderne de définir les en-têtes de réponse HTTP Expires
et Cache-Control
(directive max-age
) appropriés.
Cela va quelque chose comme:
ExpiresActive On
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
Ceci utilise la "syntaxe alternative". Assurez-vous que les types mime indiqués correspondent aux types mime avec lesquels votre serveur répond. (2692000
secondes semblerait être proche de 1 month
)
Cependant, si vous devez modifier d'autres directives de l'en-tête Cache-Control
, vous devrez toujours utiliser la directive Header
.
<FilesMatch "\\.(ico|jpe?g|png|gif|swf|css|js)$">
De plus, la double barre oblique inversée au début de la regex est superflue, il vous suffit d'échapper au point littéral. c'est à dire. "\.(ico|
etc.
UPDATE:
J'ai déjà le jeu d'informations ExpiresByType.
La directive Header
(mod_headers) sera prioritaire si le conteneur FilesMatch
correspondant correspond à . Cependant, vous dites que beaucoup de ces fichiers "n'ont pas d'extensions .css et .js", ils ne correspondront donc pas et les directives ExpiresByType
auront priorité dans ces cas-là.
Vous avez un conflit d'intérêts entre vos directives mod_expires et mod_headers. Avec mod_expires (ExpiresByType
), vous essayez de mettre en cache les fichiers CSS et JS pendant 4 et 6 mois respectivement. Avec mod_headers (Header
), vous indiquez une durée de cache de 1 mois pour les deux?! Donc, sans extension de fichier, ces fichiers vont être mis en cache pendant 4 et 6 mois, quelle que soit votre directive Header
.
Notez également que la directive ExpiresByType
définit également l'en-tête de réponse Expires
HTTP (pour les anciens navigateurs). Cela va entrer en conflit avec l'en-tête Cache-Control
que vous définissez manuellement avec la directive Header
. Bien que tous les navigateurs modernes devraient donner la priorité à Cache-Control
par rapport à Expires
.
En gros, vous n'avez pas besoin d'utiliser Header set Cache-Control ...
si vous utilisez mod_expires. Ou, si vous le faites, vous devez vous assurer qu'ils font tous les deux la même chose.