5

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

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

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

通常这样做是这样的:

ExpiresActive On ExpiresDefault "access plus 10 minutes"

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

4

3 回答 3

17
<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 响应)也可以让它工作;如果没有关键字“ always ”,指令“Header set”仅适用于成功响应,即 HTTP 2xx 响应。

于 2010-11-15T15:45:44.993 回答
4

请注意 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]
于 2018-01-08T14:02:26.233 回答
1

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

我已经编辑了这个答案(因为它被接受了),添加了always关键字,以反映下面 Fix 正确指出的内容。

于 2009-03-27T17:12:14.277 回答