Apache 2.4:未在<Location>中设置标题不起作用

我们正在运行apache 2.4为了服务我们typo3生成的网站。

一般来说,我们希望所有请求都具有X-Frame-Options SAMEORIGIN标题。

有一个例外。 对于特定的URL,这个Header应该是未设置的,因为它必须在另一个域的iFrame中使用。

所以我加了这样的东西:

 Header always set X-Frame-Options SAMEORIGIN <Location /anotherURL> Header always unset X-Frame-Options </Location>` 

当我尝试请求给定的URL https://www.example.com/我在响应中看到X-Frame-Options -Header,但在https://www.example.com/anotherURL此标题仍然存在。

我已经检查了Location指令实际上是通过向Location指令添加一个Require all denied来处理的。 在这种情况下,如预期的那样,URL /anotherURL的访问被拒绝。

如果我将位置从/anotherURL/typo3则取消设置按预期工作。

我在这两个URL之间唯一的差别是/typo3存在于htdocs下的目录结构中/anotherURL是由Typo3处理的URL。

我现在的问题是,为什么Apache会忽略我的Header unset命令? 从Apaches的angular度来看,一旦Typo3产生了Location-Directive应该匹配的响应头(显然是这样做的)和处理内部命令,它应该不知道Typo3正在做什么。

我浏览了一些关于HTTP标头未设置问题的其他问题,但没有任何build议解决了我的具体问题。

尝试这个:

 <Location /anotherURL> Header always unset X-Frame-Options Header unset X-Frame-Options </Location> 

与Jboss后端有同样的事情,不要修改标题,而固定它。 现在不记得为什么了( always包含关键字时与处理顺序有关)。

这是我的见解:

主要的问题是,为什么我的Header语句不在位置指令内部执行,它位于mod_rewrite中。

一旦有一个像/anotherURL那样的虚拟URL的请求(没有物理实体存在)进来,mod_rewrite就会开始应用它的规则。 在这里它将它映射到/index.php ,并将信息/anotherURL推入/anotherURL参数,稍后用于识别Typo3页面。

这解释了为什么Header语句不被执行,请求的位置已经改变。

现在到解决scheme,这对我有用。 由于我不能依靠的URL我必须find另一个信息。 Referer对我来说很合适:

SetEnvIf Referer ^https:\/\/www.(location1|location2).de\/test\.html$ IFRAME_ENV Header always set X-Frame-Options "sameorigin" env=!IFRAME_ENV

会做的伎俩。

现在对每一个请求引用者进行检查。 默认情况下,添加了X-Frame-Otions Header,除了当引用者被设置为两个URL时,我希望允许embeddediframe。

如果有人知道如何应用位置指令之前mod_rewrite踢,我非常开放的意见,这样的解决scheme:)直到当这似乎为我工作。

感谢大家的支持。