htaccess Access-Control-Allow-Origin


134

他のサイトに外部からロードするスクリプトを作成しています。CSSとHTMLをロードし、自分のサーバーで正常に動作します。

ただし、別のWebサイトで試してみると、次のようなエラーが表示されます。

Access-Control-Allow-Origin

ここでは、完全に読み込まれることがわかります:http : //tzook.info/bot/

しかし、この他のウェブサイトではエラーが表示されます:http : //cantloseweight.co/robot/

読み込みスクリプトをjsfiddleにアップロードしました:http ://jsfiddle.net/TL5LK/

次のようにhtaccessファイルを編集してみました。

<IfModule mod_headers.c>    
    Header set Access-Control-Allow-Origin *
</IfModule>

またはこのように:

Header set Access-Control-Allow-Origin *

しかし、それでも機能しません。

回答:


269

外部ルートフォルダの.htaccessでこれを試してください:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

そして、それが.jsスクリプトのみに関係する場合は、上記のコードをこの中にラップする必要があります。

<FilesMatch "\.(js)$">
...
</FilesMatch>

6
の使用に関する素晴らしいアドバイスFilesMatch
2014

1
filesmatchブロックを追加してファイルを一致させると、どうなり*ますか?
シェンクウェン2016年

これを実行した後、サーバーを再起動する必要がありますか?上記のコードを適用しましたが、\。jsonにアクセスできません。に変更jsしましたjson
シェンクウェン2016年

3
@shenkwenは*、任意の起点ドメインがこのリソースにアクセスすることを許可します。これはリソースのリストではなく、参照ドメインのリストです。
SparK 2016年

3
それが動作しない場合は、あなたが有効にしてみなければならないheadersモジュールを:a2enmod headers
ホアキン・O

53

mod_headersも有効にする必要があるとも言っていないので、それでも機能しない場合は、これを試してください:

(以下のヒントはUbuntuで機能しますが、他のディストリビューションについては知りません)

ロードされたモジュールのリストを確認することができます

apache2ctl -M

使用できるmod_headersを有効にする

a2enmod headers

もちろん、Apacheを変更した後は、再起動する必要があります。

/etc/init.d/apache2 restart

その後、使用できます

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

そしてmod_headersがアクティブでない場合、この行は何もしません。if句をスキップHeader set Access-Control-Allow-Origin "*"して設定に追加するだけで、mod_headersがアクティブでない場合は起動時にエラーがスローされます。


3
私がグーグルで見つけることができるすべてのオプションを試していて、あなたが言ったように、誰もmod_headersについて何も言わなかった。感謝!
Sirkong、2016

1
私のmod_headersはアクティブであり、この行を.htaccessに追加しましたが(前述と同じ場所)、このエラーが引き続き発生します:プリフライトの応答に無効なHTTPステータスコード400があります。
Sushivam 2017

1
mod_headersは欠けていたものでした!これは.htaccessルールで完全に機能しています。ありがとうございました。
アンディ

@SachinS 400エラーは見つかりませんでした。500はサーバーエラーです。そこから始めましょう。
アンディ

30

私の経験から;

それは内から動作しない場合phpに、これを行う.htaccessことが私のために働きました

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin http://www.vknyvz.com  
    Header set Access-Control-Allow-Credentials true
</IfModule>
  • 資格情報は、ajaxリクエストパラメータに応じてtrueまたはfalseになります。

これは私にはうまくいきませんでしたが、同じ原理でphpで動作させることができました。
RevNoah 2013

16

.htaccessフォントへのアクセスに問題がある場合は、次のディレクティブを含むファイルをフォントフォルダーに追加します。.cssファイルまたは.jsファイルで使用するために簡単に変更できます。

<FilesMatch "\.(eot|ttf|otf|woff)$">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>

1
上記のように、ファイルがフォントディレクトリにあり、フォントディレクトリに、のみが含まれている場合、上記の<FilesMatch>ディレクティブは不要であることに注意してください。、および/またはファイル。.htaccess.eotttf.otf.woff
Mesagoma 2017

9

他の答えは私にとってはうまくいきませんでした、これは結局apache2のトリックを行うことになったものです:

1)ヘッダーmodを有効にします。

sudo a2enmod headers

2)/etc/apache2/mods-enabled/headers.confファイルを作成して挿入します。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

3)サーバーを再起動します。

sudo service apache2 restart


これは私のUbuntu 16.10サーバーで私のために働いた唯一のソリューションです。
ニーキ2017

これも私にとってはうまくいきました。Ubuntu 16.04サーバーを使用しています。ありがとうございました。
jhedm 2018年

Ubuntu 18.04で私のために働いた。しかし、Firefox 70.0.1はAccess-Control-Allow-Originヘッダーだけでは満足せず、Access-Control-Allow-Methodsヘッダーも追加する必要がありました。
borizzzzz

@songololo Centos 7でapache用のこのファイルを見つけることができませんでした。/etc/httpdディレクトリのあちこちを見ました。Centosに実装する方法を教えてください。
Mainuddin

@Mainuddin、申し訳ありませんが、私はCentosに詳しくありません。他のうまくいけば、誰かがチャイムすることができます。
songololo

7

Zend Framework 2.0では、この問題がありました。.htaccessまたはphpヘッダーの2つの方法で解決できます。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

RewriteEngine On

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

そしてそれは働き始める


これは私の日、php couddnt仕事を救ったので、htaccessはそれをしました。
Relm、2014年

4

ところで:.htaccess設定は、APIをホストするサーバーで行う必要があります。たとえば、x.comドメインでAngularJSアプリを作成し、y.comでRest APIを作成する場合、xではなくy.comのルートフォルダーの.htaccessファイルにAccess-Control-Allow-Origin "*"を設定する必要があります.com :)

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

また、Lukasが述べたように、Apacheを使用する場合はmod_headersを有効にしてください。


1

リダイレクトが発生していないことを確認してください。これは、URLの末尾にスラッシュを含めないと発生する可能性があります。

詳細については、この回答を参照してください– https://stackoverflow.com/a/27872891/614524


0

ホストがpvnまたは専用ではない場合、サーバーを再起動することは困難です。

私からのより良い解決策は、フォントeot、woffなどを呼び出し元(your-domainまたはwww yourdomain)に呼び出すCSSファイル(別のドメインまたはサブドメイン)を編集することだけです。それはあなたの問題を解決します。

つまり、CSSの相対URLを絶対URLの起点ドメインに編集します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.