Apache 重定向并设置缓存标头?

Apache 重定向并设置缓存标头?

在 Apache 中执行重定向很容易(mod_alias):

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

设置缓存头同样简单:

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

(我不想缓存它)

但是!似乎您无法将两者结合起来。此配置会导致发送重定向,但不发送标头:

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

关于如何返回重定向的任何想法缓存头?

答案1

尝试将“always”条件添加到您的 Header 指令中,因此它应该看起来像这样:

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

这应该可以工作,如果没有“始终”条件,我相信它默认为“onsuccess”,定义为任何 2xx 响应代码。

答案2

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

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

设置 xredirect,然后设置您的脚本以推出您想要的标题...这并不好看,但据我所知,这是唯一的方法。

相关内容