Apache的redirect和设置caching头?

在Apache中做redirect很简单(mod_alias):

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

设置caching标题同样简单:

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

(我不想这个caching)

但! 看来你不能把两者结合起来。 这个configuration会导致redirect被发送,但不是标题:

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

实际发生的例子:

 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) 

任何想法如何返回caching头redirect?

尝试添加“总是”条件到你的Header指令,所以它应该看起来像这样:

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

这应该工作,没有“总是”的条件,我相信它默认为“onsuccess”被定义为任何2xx响应代码。

您需要在Perl或PHP中实现一个中间人脚本(我会使用PHP,如果已经加载,则更简单)。 查看重写指南,search“扩展redirect”:

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

设置xredirect,然后设置你的脚本推出你想要的标题…这不是很好,但据我所知,这是唯一的方法来做到这一点。