我有一个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>
答案 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标头。