如何在Apache中向302重定向添加其他标头?

时间:2009-03-27 16:43:04

标签: apache redirect cdn http-status-code-302

我在Apache配置中有重定向,如

重定向temp /foo.xml http://www.baz.com/foo.xml

我正在尝试为这个302添加一个CDN的Expire和m-cache头。这在php中是微不足道的,但我需要在Apache配置文件中执行此操作。

通常情况如下:

   ExpiresActive On    ExpiresDefault“访问加10分钟”

但这似乎不适用于302重定向。有什么建议吗?

3 个答案:

答案 0 :(得分: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>

即使使用HTTP 302响应也能使其工作(实际上,使用任何HTTP响应); 没有关键字“始终”,指令“标头集”仅适用于成功响应,即HTTP 2xx响应。

答案 1 :(得分:2)

请注意Apache 2.2中的一个奇怪的错误(在Apache 2.2.15中观察到),如果您使用env=HTTPS来控制何时设置Header,则会使这很难。由于某些原因env=HTTPS在重定向期间无法触发,即使使用RewriteCond %{HTTPS} on来控制重定向也是如此。因此,在我的配置中启用HTTP严格传输安全性(HSTS),我使用RewriteRule创建一个名为X_HTTPS的环境变量,其值与HTTPS相同,但未设置为null评估env=X_HTTPS时:

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]

答案 2 :(得分:0)

查看Apache的mod_headers模块。

也许是这样的:

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

我已编辑此答案(因为已被接受),添加了始终关键字,以反映下面正确指出的修复内容。