HTTP响应标头正在被覆盖。哪里可以在apache中设置HTTP响应头?

时间:2015-07-11 05:39:19

标签: php apache .htaccess http-headers

我有一个PHP应用程序,我有条件地设置了Access-Control-Allow-Origin标头。我看到更改反映在我的本地设置和开发环境中,但在实际站点上,标题设置为其他内容。我设置的其他标头保留了它们的值,因此它让我相信Access-Control-Allow-Origin标头被覆盖在其他地方。

我检查了项目中的.htaccess文件和apache虚拟主机配置文件,以查找可能覆盖标头的可能位置。它是在虚拟主机配置文件中设置的,但我将其注释掉并重新启动了apache,但标题仍然被覆盖。

我是否还有其他地方可以检查标题是否被覆盖?

提前感谢您的帮助!

以下是请求的PHP代码段:

    $origin=$front->getRequest()->getHeader('Origin');
    if($origin && (preg_match('/http[s]{0,1}:\/\/' . $front->getRequest()->getHttpHost() . '$/', $origin))){
        $front->getResponse()->setHeader('Access-Control-Allow-Origin', $origin);
        $front->getResponse()->setHeader('Access-Control-Allow-Credentials', 'true');
    }else{
        //leave current value if there is no match
        $front->getResponse()->setHeader('Access-Control-Allow-Origin', '*');
    }

我非常确定标题被其他内容覆盖,因为我可以看到Access-Control-Allow-Credentials:true按预期方式完成,但Access-Control-Allow-Origin的值为*。< / p>

2 个答案:

答案 0 :(得分:1)

我做了一些挖掘工作,发现this链接在.htaccess中执行相同操作。我最后添加了以下内容:

SetEnvIf Origin "^http(s)?://(.+\.)?(www.example.com)$" origin_is=$0
Header set Access-Control-Allow-Origin %{origin_is}e env=origin_is
Header set Access-Control-Allow-Credentials true env=origin_is

答案 1 :(得分:0)

您可以从htaccess:

设置标题
<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

或者来自PHP:

header("access-control-allow-origin: *");

您可以使用:

<IfModule mod_headers.c>
  <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$">
    Header set Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>

为指定文件应用htaccess标头。