クロスドメインアクセスヘッダー用にApacheを構成します。フォーラムのスレッド数で提案されているように、複数の組み合わせを試しました。しかし、それは私のために働いていません。
方法は、私が試した:
1)Header set
を使用して、次のように別の行にドメインを指定します。
Header set Access-Control-Allow-Origin "example1.com"
Header set Access-Control-Allow-Origin "example2.com"
Header set Access-Control-Allow-Origin: "example3.com"
この設定では、ピッキング最後の1つのみで、残りはすべて無視されます。
2)Header add
を使用して、次のように別の行にドメインを指定します。
Header add Access-Control-Allow-Origin "example1.com"
Header add Access-Control-Allow-Origin "example2.com"
Header add Access-Control-Allow-Origin: "example3.com"
これにより、3つのドメインすべてがヘッダーに表示されますが、Firefoxではフォントが選択されません。
3.)SetEnvIf
を使用してみましたが、再び動作しません:
SetEnvIf Origin "http(s)?://(www\.)?(mydomain.com|mydomain2.com)$" AccessControlAllowOrigin=$0$1
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
最後に「*」で作業しますが、これは使いたくありません。
これで助けてください。
3つのドメインの場合、.htaccessで:
<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(www\.)?(domain1.org|domain2.com|domain3.net)$" AccessControlAllowOrigin=$0$1
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header set Access-Control-Allow-Credentials true
</IfModule>
私はこれを試してみましたが、うまくいきます。それがあなたに合わないなら教えてください。
マニュアル を誤解していない限り、次のようになります。
Header always append Access-Control-Allow-Origin: "example1.com"
Header always append Access-Control-Allow-Origin: "example2.com"
Header always append Access-Control-Allow-Origin: "example3.com"
マニュアルには、set
およびadd
アクションが次のように動作することが記載されています。
set: "応答ヘッダーが設定され、以前のヘッダーをこの名前に置き換えます"
add: "...これにより、同じ名前を持つ2つ(またはそれ以上)のヘッダーが生じる可能性があります。これにより、予期しない結果が生じる可能性があります..."
特定のURIへのアクセスを制限するには、これらのドキュメントをチェックアウトします。
役立つヒントの1つは、Apacheの書き換え、環境変数、ヘッダーを使用して、特定のURIにAccess-Control-Allow- *を適用することです。これは、たとえば、クロスオリジンリクエストを資格情報なしのGET /api(.*).jsonリクエストに制約する場合に便利です。
RewriteRule ^/api(.*)\.json$ /api$1.json [CORS=True]
Header set Access-Control-Allow-Origin "*" env=CORS
Header set Access-Control-Allow-Methods "GET" env=CORS
Header set Access-Control-Allow-Credentials "false" env=CORS
また、一般的には W3 Wiki-CORS Enabled#For_Apache に従って、ヘッダーを公開するには、Directory、Location、およびFilesセクション内、または.htaccessファイル内に次の行を追加できます。
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
また、setではなくaddを使用できますが、addはヘッダーを複数回追加できるため、通常はsetを使用する方が安全です。
これを試して、それは私のために動作します。 .htaccessで適用:
SetEnvIf Origin "^http(s)?://(.+\.)?(domain\.org|domain2\.com)$" Origin_is=$0
Header always set Access-Control-Allow-Origin %{Origin_is}e env=Origin_is
Apache 2.4では、Apache WebサーバーのSETコマンドを使用して、ヘッダーを動的に設定しました。
<IfModule mod_deflate.c>
# CORS
SetEnvIfNoCase Origin "http(s)?://(\w+\.)?(example.com|localhost)(:[0-9]+)?$" AccessControlAllowOrigin=$0
Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header set Access-Control-Allow-Credentials true
</IfModule>
ADDコマンドは機能しませんでした。
100%動作します。htaccessで適用:
# Enable cross domain access control
SetEnvIf Origin "^http(s)?://(.+\.)?(domain1\.com|domain2\.org|domain3\.net)$" REQUEST_Origin=$0
Header always set Access-Control-Allow-Origin %{REQUEST_Origin}e env=REQUEST_Origin
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "x-test-header, Origin, X-Requested-With, Content-Type, Accept"
# Force to request 200 for options
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule .* / [R=200,L]