2015-07-11 72 views
0

我有一个PHP应用程序,我有条件地设置Access-Control-Allow-Origin标题。我看到改变反映在我的本地设置和开发环境上,但在现场,头部被设置为别的东西。我设置的其他头文件保持它们的值,所以它使我相信Access-Control-Allow-Origin头被其他地方覆盖。正在覆盖HTTP响应标题。哪里可以在Apache中设置HTTP响应头?

我检查了我项目中的.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*值。

回答

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 
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的标头指定的文件。

+0

我想标题设置为http://example.com或https://example.com,让我的安全和不安全的页面之间的AJAX请求CORS。我想我需要在PHP中这样做,但是有一件事是覆盖我在PHP中设置的头文件,但是我找不到在哪里。 – Shilpam

+0

请给我看你的PHP代码。请确保apache'mod_headers'已启用。 –