Rediriger Apache et définir les en-têtes de cache?

10

Faire une redirection dans Apache est facile (mod_alias):

RedirectMatch ^.*$ http://portal.example.com/

La définition des en-têtes de cache est tout aussi simple:

Header set Cache-Control max-age=0
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"

(Je ne veux pas que cela soit mis en cache)

Mais! Il semble que vous ne puissiez pas combiner les deux. Cette configuration entraîne l'envoi de la redirection, mais pas les en-têtes:

<VirtualHost *:80>
        ServerName __default__
        Header set Cache-Control max-age=0
        Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
        RedirectMatch ^.*$ http://portal.example.com/
</VirtualHost>

Exemple de ce qui se passe réellement:

jb@apto % telnet 192.168.0.1 80
Trying 192.168.0.1...
Connected to redirector.example.com.
Escape character is '^]'.
GET / HTTP/1.1
Host: foo

HTTP/1.1 302 Found
Date: Sat, 21 Aug 2010 09:36:38 GMT
Server: Apache/2.2.9 (Debian) Phusion_Passenger/2.2.9
Location: http://portal.example.com/
Vary: Accept-Encoding
Content-Length: 316
Content-Type: text/html; charset=iso-8859-1

(etc)

Des idées sur la façon de retourner une redirection avec des en- têtes de cache?

Jakob Borg
la source

Réponses:

10

Essayez d'ajouter la condition "toujours" à votre directive Header, elle devrait donc ressembler à ceci:

Header always set Cache-Control max-age=0
Header always set Expires "Thu, 01 Dec 1994 16:00:00 GMT"

Cela devrait fonctionner, sans la condition "toujours", je crois que c'est par défaut "onsuccess" qui est défini comme n'importe quel code de réponse 2xx.

miishuu
la source
!!! Je ne sais pas comment j'ai raté ça, mais oui!
Jakob Borg
Oui, c'est ça. Génial.
Cosimo
Cela ne semble pas fonctionner pour les en-têtes personnalisés, étrange
juan
0

Vous devrez implémenter un script intermédiaire en Perl ou PHP (j'utiliserais PHP, c'est plus simple s'il est déjà chargé). Consultez le guide de réécriture, recherchez "Redirection étendue":

http://httpd.apache.org/docs/2.2/misc/rewriteguide.html

Configurez xredirect, puis définissez votre script pour extraire les en-têtes que vous voulez ... ce n'est pas joli, mais pour autant que je sache, c'est la seule façon de le faire.


la source
Pas assez en effet, je suis assez surpris que ce ne soit pas mieux faisable (directement dans la configuration), mais cela ressemble à une bonne réponse. :(
Jakob Borg