自定义标头 (mod_headers) 未与 mod_rewrite 结合显示

Tom*_*rts 5 mod-rewrite http-headers apache-2.2

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

这就是我正在做的事情(在虚拟主机和 .htaccess 中都尝试过,结果是相同的)

SetEnvIf HOST thishost THETAG=noindex
Header set X-Robots-Tag "%{THETAG}e" env=THETAG
Header set X-Robots-Test "Yes"
Run Code Online (Sandbox Code Playgroud)

所以基本上,X-Robots-Test 标头应该始终存在。X-Robots-Tag 仅应在设置了 THETAG 标头后才出现,而该标头仅在主机标头包含“thishost”时才设置。

RewriteRule 看起来像这样,所以基本上是从 page1 到 page2 的 301 重定向

RewriteRule page1 page2 [L,R=301]
Run Code Online (Sandbox Code Playgroud)

当向 page2 发出请求时,标头会正确显示,但当向 page1 发出请求(并由 mod_rewrite 重定向)时,标头不存在(甚至不存在测试标头)。

当从 PHP 脚本而不是 mod_rewrite 启动重定向时,它确实显示标头,因此我认为问题是 mod_rewrite 优先于 mod_headers。有没有什么办法解决这一问题?

IBB*_*ard 4

正如@Zimmi 在评论中所说,标头仅应用于“成功”响应(HTTP 2xx 代码)。重定向是 3xx 代码,因此不会获取标头。

\n\n

如果您正在使用,Header set \xe2\x80\xa6请使用Header always set \xe2\x80\xa6. 如果您使用不同的操作(添加、追加等),则使用适当的操作。

\n\n

但请注意,您不应该盲目地“始终设置”。从文件来看中:

\n\n
\n

在类似下面列出的情况下,onsuccess 的默认值可能需要更改为always。另请注意,在某些情况下,在这两个条件下重复此指令是有意义的,因为相对于现有标头,always 不是 onsuccess 的超集:

\n\n

您正在向不成功(非 2xx)响应(例如重定向)添加标头,在这种情况下,最终响应中仅使用与always对应的表。\n您正在修改或删除由 CGI 脚本生成的标头,在这种情况下,CGI 脚本位于始终对应的表中,而不是默认表中。\n 您正在修改或删除由服务器的某些部分生成的标头,但该标头不是被默认的成功条件找到。

\n
\n\n

对于 HSTS 标头(这就是我试图添加到域规范化中的内容),这似乎是正确的方法。

\n