Apache umleiten und Cache-Header setzen?

10

Eine Weiterleitung in Apache ist einfach (mod_alias):

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

Das Festlegen von Cache-Headern ist ebenso einfach:

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

(Ich möchte das nicht zwischengespeichert)

Aber! Es scheint, dass Sie die beiden nicht kombinieren können. Diese Konfiguration führt dazu, dass die Umleitung gesendet wird, nicht jedoch die Header:

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

Beispiel dafür, was tatsächlich passiert:

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)

Irgendwelche Ideen, wie man eine Umleitung mit Cache-Headern zurückgibt?

Jakob Borg
quelle

Antworten:

10

Fügen Sie Ihrer Header-Direktive die Bedingung "immer" hinzu, damit sie folgendermaßen aussehen sollte:

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

Dies sollte funktionieren, ohne die Bedingung "immer", von der ich glaube, dass sie standardmäßig "onsuccess" ist, was als ein beliebiger 2xx-Antwortcode definiert ist.

miishuu
quelle
!!! Ich weiß nicht, wie ich das verpasst habe, aber ja!
Jakob Borg
Ja, das ist es. Groß.
Cosimo
Dies scheint nicht zu Arbeit für benutzerdefinierte Header, seltsam
juan
0

Sie müssen ein Middle-Man-Skript in Perl oder PHP implementieren (ich würde PHP verwenden, es ist einfacher, wenn es bereits geladen ist). Lesen Sie die Anleitung zum Umschreiben und suchen Sie nach "Erweiterte Umleitung":

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

Richten Sie xredirect ein und stellen Sie dann Ihr Skript so ein, dass die gewünschten Header herausgeschoben werden. Es ist nicht schön, aber soweit ich weiß, ist dies der einzige Weg, dies zu tun.


quelle
In der Tat nicht schön, ich bin ziemlich überrascht, dass dies nicht besser machbar ist (direkt in der Konfiguration), aber dies scheint eine richtige Antwort zu sein. :(
Jakob Borg