web-dev-qa-db-fra.com

Apache FilesMatch regexp: Peut-il correspondre aux 10 chiffres du cache de cache (générés par Rails) après le nom du fichier?

Selon Apache FilesMatch docs:

La directive FilesMatch permet le contrôle d'accès par nom de fichier.

Fondamentalement, je veux uniquement définir un en-tête Expires pour les ressources ayant un identifiant de "cache buster" à 10 chiffres ajouté au nom. Donc, voici ma tentative d'une telle chose dans mon httpd.conf

<FilesMatch "(jpg|jpeg|png|gif|js|css)\?\d{10}$">
    ExpiresActive On
    ExpiresDefault "now plus 5 minutes"
</FilesMatch>

Et voici un exemple de ressource que je veux associer:

http://localhost:3000/images/of/elvis/eating-a-bacon-sandwich.png?1306277384

Maintenant, évidemment, mon expression rationnelle FilesMatch ne correspond pas, alors je devine qu’une chose sur 2 se passe. Soit mon expression rationnelle est wonky, soit la partie du fichier contournant le cache '? 1231231231' ne fait pas partie de ce que Apache considère comme faisant partie du nom de fichier. Quelqu'un peut-il confirmer et/ou me donner un moyen de ne mettre en cache que les ressources qui ne persisteront pas après le prochain déploiement?

1
ynkr

A réussi un test simple et je pense avoir la réponse.

Nom de la ressource: http: // localhost: 3000/stylesheets/baseline.css? 1309365344

Premier test - Echec - Le fichier baseline.css n'a pas été mis en cache.

<FilesMatch "baseline.css\?1309365344">
    ExpiresActive On
    ExpiresDefault "now plus 1 week"
</FilesMatch>

Deuxième test - Réussite - Ceci a mis en cache le fichier baseline.css.

<FilesMatch "baseline.css">
    ExpiresActive On
    ExpiresDefault "now plus 1 week"
</FilesMatch>

Conclusion : Quand Apache dit "La directive FilesMatch fournit un contrôle d'accès par nom de fichier", elle n'inclut rien après l'extension dans le nom du fichier.

Cependant, je dois encore trouver un moyen d'appliquer uniquement ExpiresDefault aux ressources dont l'horodatage est défini sur le chemin d'accès aux ressources. Je vais mettre cela dans ne autre question .

1
ynkr

Je viens de lutter avec un problème de htaccess avec un? dans l'URL. Le ? ne fait pas techniquement partie du nom de fichier, mais une chaîne de requête. Je ne serais pas surpris si cela ne soit pas passé à FilesMatch.

La chose que j'ai utilisée était

RewriteCond %{QUERY_STRING} ^something$

Évidemment, vous ne faites pas de réécriture, mais vous pouvez essayer de piéger le %{QUERY_STRING}.

1
paulmorriss