2009-03-27 4 views
4

J'ai une redirection dans la configuration Apache commeComment ajouter des en-têtes supplémentaires aux redirections 302 dans Apache?

Redirect température /foo.xml http://www.baz.com/foo.xml

Je suis en train d'ajouter un expireront et les en-têtes m-cache pour un CDN à ce 302. Ce serait trivial en php , mais je dois le faire dans les fichiers de configuration Apache.

Normalement cela se fait comme ceci:

ExpiresActive Sur ExpiresDefault "accès plus 10 minutes"

mais cela ne semble pas travailler pour 302 réoriente. Aucune suggestion?

+1

Configuration d'Apache? Par quel langage de programmation? –

Répondre

0

Extrayez le module mod_headers pour Apache.

Peut-être quelque chose comme:

<Location /foo.xml> 
    Redirect temp /foo.xml http://www.baz.com/foo.xml 
    Header always set ExpiresActive On 
    Header always set ExpiresDefault "access plus 10 minutes" 
</Location> 

J'ai édité cette réponse (car il a été accepté), en ajoutant le mot-clé toujours, pour refléter ce que Fix a correctement ci-dessous.

+8

Sauf que cela ne fonctionne pas car les en-têtes ne sont pas ajoutés lorsqu'une redirection est effectuée. –

+0

ne fonctionne pas dans Apache 2.2 – Thomasleveil

14
<Location /foo.xml> 
    Redirect temp /foo.xml http://www.baz.com/foo.xml 
    Header always set ExpiresActive On 
    Header always set ExpiresDefault "access plus 10 minutes" 
</Location> 

pour le faire fonctionner même avec les réponses HTTP 302 (en fait, avec n'importe quelle réponse HTTP); sans le mot clé "always", la directive "Header set" fonctionne uniquement avec des réponses de succès, c'est-à-dire des réponses HTTP 2xx.

1

Veuillez noter un bogue bizarre dans Apache 2.2 (observé dans Apache 2.2.15) qui rend cela difficile si vous utilisez env=HTTPS pour contrôler quand l'en-tête est défini. Pour certaines raisons env=HTTPS ne se déclenche pas lors des redirections, même si RewriteCond %{HTTPS} sur est utilisé pour contrôler la redirection. Donc, dans ma configuration qui permet HTTP Strict de sécurité des transports (HSTS), j'utilise utiliser un RewriteRule pour créer une variable d'environnement appelée X_HTTPS qui a la même valeur que le HTTPS, mais qui n'est pas réglé à NULL lorsque env=X_HTTPS est évaluée:

SetEnv HSTS "max-age=31536000; includeSubDomains; preload" 

# For some reason in Apache 2.2, HTTPS env variable is not available during redirects 
RewriteCond %{HTTPS} on 
RewriteRule ^.*$ - [ENV=X_HTTPS:%{HTTPS}] 
# Set HSTS Header if the page is delivered via SSL 
Header always set Strict-Transport-Security %{HSTS}e env=X_HTTPS 

# Redirect SSL-only non-www page to www and quit 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} ^example\.com$ 
RewriteRule ^(.*)$ https://www.%{SERVER_NAME}%{REQUEST_URI} [R=303,L] 

# Redirect ANY non-SSL page to SSL 
RewriteCond %{HTTPS} !on 
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ 
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=303,L] 
+0

C'est exactement ce que j'essaie de faire. Malheureusement, cette solution ne fonctionne pas pour moi. Aucune variable d'environnement ne semble fonctionner avec les redirections. La seule solution que j'ai trouvée est d'omettre la clause 'env =', qui fonctionne mais envoie aussi l'en-tête Strict-Transport-Security sur les requêtes HTTP. –

Questions connexes