
私の Web サーバー上の .htaccess ファイルには、次の CORS ヘッダーが設定されています。
Header set Access-Control-Allow-Origin "example.com"
ローカルホストから作業中に頻繁に呼び出す PHP スクリプトの 1 つに、次のヘッダーを設定しています。
header("Access-Control-Allow-Origin: *");
これは昨日までうまく機能していました。昨日、PHP の FPM をオンにしたときです。今、次のエラーが発生します。
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.example.com/script.php. (Reason: CORS header 'Access-Control-Allow-Origin' does not match '*, example.com').
このエラーは、Web サイトから呼び出しているときではなく、ローカルホストから呼び出しているときにのみ発生します。FPM が有効になっているので、PHP 経由で CORS ヘッダーをオーバーライドする方法があるかどうか知りたいです.htaccess
。
答え1
理由: CORS ヘッダー「Access-Control-Allow-Origin」が「*, example.com」と一致しません
興味深いことに、それはHeader merge
ではなく が呼び出された場合と同じですHeader set
。このような「マージされた」値はヘッダーで正式にサポートされていないAllow-Control-Allow-Origin
ため、ブラウザーのサポートは異なる可能性があり、それが機能しない理由を説明します。
.htaccess
FPM が有効になったので、PHP 経由で CORS ヘッダーを上書きする方法があるかどうか。
PHP が Apache を上書きするのではなく、Apache が PHP によって設定されたヘッダー (これは以前に設定されています) を上書きしないようにする必要があると思います。setifempty
次のアクションを試してください。
Header setifempty Access-Control-Allow-Origin "example.com"
条件を試すこともできますalways
。つまり、Header always set ....
これは、デフォルト onsuccess
つまり、ヘッダーは実質的に 2 回設定されていることになります。
Access-Control-Allow-Origin
ただし、複数のヘッダーが厳密に標準の一部であるとは考えていないため、ブラウザによって動作が異なる場合があります。
StackOverflow の次の関連質問も参照してください。