2015-07-11 71 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'已啓用。 –