Apache mod_headers无法在路径

时间:2017-01-18 20:25:51

标签: apache http-headers response-headers mod-headers setenvif

我试图在所有情况下使用Apache中的mod_headers设置一个标题,除了某个路径。我已经尝试了以下三种变体中的每一种都这样做,但它们似乎都没有正常工作来排除路径。在所有情况下,我都会获得所有请求的标头,包括那些与示例路径匹配的请求,例如:http://example.com/charts/24_hour_commodity/450/300

<VirtualHost *:8200>
...
    SetEnvIfNoCase Request_URI "^/charts/.*" frameallow
    Header set X-Frame-Options SAMEORIGIN env=!frameallow
...
</VirtualHost>

或者:

<VirtualHost *:8200>
...
    Header always set X-Frame-Options SAMEORIGIN
    <LocationMatch "^/charts">
        Header always unset X-Frame-Options
    </LocationMatch>
...
</VirtualHost>

或者

<VirtualHost *:8200>
...
    Header always set X-Frame-Options SAMEORIGIN
    <Directory "/full/path/to/charts">
        Header always unset X-Frame-Options
    </Directory>
...
</VirtualHost>

#tried both with and without the 'always' in all configs

任何人都可以帮我弄清楚为什么在第一个例子中设置标题或者在以下两个例子中未设置标题?任何一种工作解决方案都足够......

更新: 在阅读了关于Apache站点上的处理顺序之后,我尝试使用条件块。这些都不起作用:

<If "%{REQUEST_URI} =~ m#^/charts#">
    Header unset X-Frame-Options
</If>

或者

SetEnvIfNoCase Request_URI "^/charts" frameallow
<If "reqenv('frameallow') == 1">
    Header unset X-Frame-Options
</If>

所以,还是坏了。必须是关于Header语句在处理中的某个点之后不触发的事情。或者有条件的那些条件以某种方式在主要的之前触发并被覆盖。但是找不到将其调试到根本原因的方法。

1 个答案:

答案 0 :(得分:0)

使用表达式响应标头

Header always set Access-Control-Allow-Origin * "expr=%{REQUEST_URI} =~ m#^/specialPath$#"

这可能在expr = true

中添加标头

http://httpd.apache.org/docs/current/mod/mod_headers.html

标题指令

部分底部的