web-dev-qa-db-fra.com

Essayer d'ajouter un en-tête de cache à 301 pages créées par Mod_Rewrite

Plusieurs URL de mon site Web sont redirigées vers d'autres URL à l'aide de Mod-Rewrite. Par exemple:

RewriteRule ^section$ /newsection [NC,L,R=301]

La règle ci-dessus redirige http://example.com/section vers http://example.com/newsection (J'utilise example.com ici parce que je ne Je ne veux pas utiliser ma vraie URL car elle n’est pas pertinente pour ma question)

J'ai ensuite procédé au test de la page à l'aide de l'optimiseur webpagetest à l'adresse webpagetest.org. La page de redirection reçue et l'erreur sont les suivantes:

Leverage browser caching of static assets: ##/100

FAILED - (No max-age or expires) - http://example.com/section

Alors, j'ai ensuite visité la même page via l'outil de ligne de commande CURL et les résultats sont les suivants:

Corps:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://example.com/newsection">here</a>.</p>
</body></html>

Et en-têtes:

HTTP/1.1 301 Moved Permanently
Date: Sun, 08 Mar 2015 18:09:18 GMT
Server: Apache
Location: http://example.com/newsection
Content-Type: text/html; charset=iso-8859-1

Existe-t-il un moyen d'ajouter un contrôle de cache ou un en-tête d'expiration avec une date future lointaine uniquement aux pages renvoyant un code d'état 301 ou 302 afin que les utilisateurs n'aient pas à se rendre sur le réseau uniquement pour charger une page de redirection ?

3
Mike

Vous pouvez définir une variable d'environnement dans la directive RewriteRule et définir l'en-tête Cache-Control de manière conditionnelle en fonction de la présence de cette variable d'environnement ...

RewriteRule ^section$ /newsection [NC,L,R=302,E=cachesection:1]
Header always set Cache-Control "max-age=86400" env=cachesection

... pour mettre en cache la redirection "temporaire" pendant 1 jour.

1
MrWhite