我在Apache配置中有重定向,如
重定向temp /foo.xml http://www.baz.com/foo.xml
我正在尝试为这个302添加一个CDN的Expire和m-cache头。这在php中是微不足道的,但我需要在Apache配置文件中执行此操作。
通常情况如下:
ExpiresActive On ExpiresDefault“访问加10分钟”
但这似乎不适用于302重定向。有什么建议吗?
答案 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>
我已编辑此答案(因为已被接受),添加了始终关键字,以反映下面正确指出的修复内容。