2013-10-22 6 views
5
header('Access-Control-Allow-Origin: http://splash.example.com'); 
header('Access-Control-Allow-Credentials: true'); 

こんにちはもう一度Stackoverflow!複数のドメインのアクセス制御 - 許可元 - より簡単な方法で

私のウェブサイトには、アヤックスファイルajax.phpがあり、そこにアクセスするために複数の(サブ)ドメインが必要です。

問題は、それが上記の投稿溶液でsplash.example.comexample.comのために働くことで、リクエストでこの:

$.ajax({ 
    ... 

    crossDomain: true, 
    xhrFields: { 
     withCredentials: true 
    }, 

    ... 
}); 

しかし、そこに簡単な方法ではないでしょうか?今すぐ上に掲載されたソリューションでも、www.example.comのために働いていません。

私は私のhtaccessでこれを入れて試してみた:

<IfModule mod_headers.c> 
    Header add Access-Control-Allow-Origin "http://example.com" 
    Header add Access-Control-Allow-Origin "http://www.example.com" 
    Header add Access-Control-Allow-Origin "http://splash.example.com" 
    Header set Access-Control-Allow-Credentials true 
</IfModule> 

が、これは何とかうまくいきませんでした。

あなたは私を助けることができますか?

答えて

5

推奨される方法は、要求ヘッダーを読み取り、原点を見つけ、サーバー側のコードで確認することです。ドメインにページへのアクセスが許可されている場合は、オリジンドメインを単一のAccess-Control-Allow-Originヘッダーに戻します。

もう1つのプロ:許可されたドメインのリストは他のドメインユーザーには表示されません。すべてのユーザーは自分のドメインのみを表示します(許可されている場合)。

+0

どのようにしてリクエストヘッダをチェックして、原点を見つけるだろうか? – Thew

+1

PHPでは '$ _SERVER [" HTTP_ORIGIN "]' – devnull69

+0

にあります。 'apache_request_headers()'を調べて配列を返したら、その配列の 'Origin'キーをチェックし、それが(access-Control-Allow-Credentials:true)」と入力した場合は、これを追加します: 'header( 'アクセス制御許可元:'。$ http_origin); ' ' ); ' 'ヘッダー('アクセス制御 - 許可ヘッダー:X-Requested-With ');' – Thew

3

この問題は数週間前にも起こり、この優れた解決策が見つかりました。

HTTP_Originヘッダーを動的に見て、元のホストのサブドメインを抽出し、Access-Control-Allow-Originヘッダーのサブドメインを使用して、任意のサブドメインにアクセスできます。

はちょうどあなたの.htaccessファイルに以下を追加:

<IfModule mod_headers.c> 
<IfModule mod_rewrite.c> 
    # Dynamically change the Access-Control-Allow-Origin header to match the sub-domain the request is coming from 
    # Define the root domain that is allowed 
    SetEnvIf Origin .+ ACCESS_CONTROL_ROOT=example.com 
    # Check that the Origin: matches the defined root domain and capture it in an environment var if it does 
    RewriteEngine On 
    RewriteCond %{ENV:ACCESS_CONTROL_ROOT} !="" 
    RewriteCond %{ENV:ACCESS_CONTROL_ORIGIN} ="" 
    RewriteCond %{ENV:ACCESS_CONTROL_ROOT}&%{HTTP:Origin} ^([^&]+)&(https?://(?:.+?\.)?\1(?::\d{1,5})?)$ 
    RewriteRule .* - [E=ACCESS_CONTROL_ORIGIN:%2] 
    # Set the response header to the captured value if there was a match 
    Header set Access-Control-Allow-Origin %{ACCESS_CONTROL_ORIGIN}e env=ACCESS_CONTROL_ORIGIN 

    # Allow credentials to enable cookies being sent cross domain, so the user can stay logged is as long as the session file is available to both domains 
    Header set Access-Control-Allow-Credentials "true" 

    # Set here the headers needed for the AJAX requests, if a needed header is not in this list you will see an error in Chrome mentioning which header needs to be added here 
    Header set Access-Control-Allow-Headers "sender, filename, content-type, accept, x-requested-with, x-request" 
</IfModule> 
</IfModule> 
+3

+1 htaccess狂気のため。 – Thew

+0

どうすれば複数のドメインに使用できますか? –