在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,然后设置你的脚本推出你想要的标题…这不是很好,但据我所知,这是唯一的方法来做到这一点。