我有一个与多个域名链接到它的虚拟主机。 我正在尝试发送额外的标头,当一个特定的域名请求。
这就是我正在做的(在.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),那么它似乎是正确的做法。