【问题标题】:HTTP Response Header is being overwritten. Where all can HTTP Response headers be set in apache?HTTP 响应标头正在被覆盖。在 apache 中可以在哪里设置 HTTP 响应标头?
【发布时间】:2015-09-29 23:22:00
【问题描述】:

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

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

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

提前感谢您的帮助!

这里是请求的 PHP 代码 sn-p:

    $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 的值为 *

【问题讨论】:

    标签: php apache .htaccess http-headers


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      您可以从 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 标头。

      【讨论】:

      • 我正在尝试将标头设置为 example.comexample.com 以允许我的安全和不安全页面之间的 ajax cors 请求。我想我需要在 PHP 中执行此操作,但有些东西覆盖了我在 PHP 中设置的标头,但我找不到在哪里。
      • 请给我看你的 PHP 代码。请确保 apache mod_headers 已启用。
      猜你喜欢
      • 1970-01-01
      • 2014-10-12
      • 2012-06-19
      • 2012-06-12
      • 2017-08-28
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 2017-01-18
      相关资源
      最近更新 更多