2009-03-27 7 views
4

Ich habe eine Umleitung in Apache Config wieWie fügt man zusätzliche Header zu 302 Redirects in Apache hinzu?

Redirect Temp /foo.xml http://www.baz.com/foo.xml

I dieser 302 eine Ablaufen und m-Cache-Header für eine CDN hinzufügen versuche diese in PHP trivial wäre , aber ich muss dies in Apache-Konfigurationsdateien tun.

Normalerweise wird dies wie folgt geschehen:

ExpiresActive Auf ExpiresDefault "access plus 10 minutes"

aber dies scheint nicht nur für 302 Redirects zu arbeiten. Irgendwelche Vorschläge?

+1

Apache-Konfiguration? Über welche Programmiersprache? –

Antwort

0

Überprüfen Sie das Modul mod_headers für Apache.

Vielleicht so etwas wie:

<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> 

ich diese Antwort bearbeitet haben (da es angenommen wurde), und fügte hinzu, die immer Schlüsselwort, zu reflektieren, was richtig Fix unten aufgezeigt.

+8

Ausgenommen, das funktioniert nicht wirklich, weil die Header nicht hinzugefügt werden, wenn eine Weiterleitung erfolgt. –

+0

funktioniert nicht in 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> 

um es funktioniert auch mit HTTP 302 Antworten (eigentlich mit jeder HTTP-Antwort); ohne das Schlüsselwort "immer" funktioniert die Direktive "Header set" nur mit Erfolgsantworten, d. H. HTTP 2xx-Antworten.

1

Bitte beachten Sie einen seltsamen Fehler in Apache 2.2 (beobachtet in Apache 2.2.15), der dies schwierig macht, wenn Sie env=HTTPS verwenden, um zu steuern, wann der Header gesetzt wird. Aus irgendeinem Grund kann env=HTTPS während Umleitungen nicht ausgelöst werden, auch wenn RewriteCond %{HTTPS} on verwendet wird, um die Umleitung zu steuern. Also in meiner Konfiguration, die HTTP Strict Transport Security (HSTS) ermöglicht, verwende ich eine RewriteRule verwenden, um eine Umgebungsvariable zu erstellen X_HTTPS genannt, die den gleichen Wert wie die HTTPS hat, die aber nicht auf null gesetzt, wenn env=X_HTTPS ausgewertet wird:

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

Das ist genau das, was ich versuche zu tun. Leider funktioniert diese Lösung nicht für mich. Keine Umgebungsvariablen scheinen mit Umleitungen zu arbeiten. Die einzige Lösung, die ich gefunden habe, ist, die 'env =' -Klausel wegzulassen, die funktioniert, aber auch den Strict-Transport-Security-Header bei einfachen HTTP-Anfragen sendet. –