自定义标题(mod_headers)不会与mod_rewrite结合显示

我有一个与多个域名链接到它的虚拟主机。 我正在尝试发送额外的标头,当一个特定的域名请求。

这就是我正在做的(在.htaccess的vhost中都尝试过,结果是一样的)

SetEnvIf HOST thishost THETAG=noindex Header set X-Robots-Tag "%{THETAG}e" env=THETAG Header set X-Robots-Test "Yes" 

所以基本上,X-Robots-Test标题应该始终存在。 如果设置了THETAG标题,则只有当主机标题包含“thishost”时才设置X-Robots-Tag。

RewriteRule看起来像这样,所以基本上301从页面1redirect到page2

 RewriteRule page1 page2 [L,R=301] 

当对page2发出请求时,头部显示正确,但是当对page1发出请求(并且由mod_rewriteredirect)时,头部不存在(甚至没有testing头部)。

当从PHP脚本而不是mod_rewrite启动redirect时,它会显示标题,所以我认为问题在于mod_rewrite在mod_headers上是优先的。 有没有什么办法解决这一问题?

正如@Zimmi在评论中所说,标题仅适用于“成功”响应(HTTP 2xx代码)。 redirect是3xx代码,因此不会得到标题。

如果您正在使用Header set …然后使用Header always set … 如果您正在使用不同的操作(添加,追加等),则使用适当的操作。

但是请注意,你不应该盲目地“永远设置”。 从文件 :

onsuccess的默认值可能需要更改为总是在类似于下面列出的情况下。 还要注意,在两种情况下重复使用这个指令是有意义的,因为在现有的头文件中总是不是onsuccess的超集。

您正在向非成功(非2xx)响应(例如redirect)添加标头,在这种情况下,只有与始终对应的表才能用于最终响应。 您正在修改或删除由CGI脚本生成的头文件,在这种情况下,CGI脚本位于与始终对应的表中,而不是在默认表中。 您正在修改或删除某个服务器部分生成的标头,但该标头在默认的onsuccess条件中找不到。

对于HSTS标题(这正是我试图添加到领域cannonicalisation),那么它似乎是正确的做法。