【HTML・CSS】Access-Control-Allow-Originエラーの解決方法
ローカルでサイトを制作し、サーバにサイトをアップしてみたらデザインが崩れていました。Chromeの開発者ツールでエラーを確認すると、使用していたBootstrapやらFont Awesomeなどに全て以下のようなエラーが出ていました。
Access to font at ‘〇〇(使用していたBootstrapやらFont AwesomeのURL)’ from origin ‘〇〇(サイトURL)’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
調べてみるとCORSエラーというようです。
今回はサイトURLに…
・wwwあり▶エラー
・wwwなし▶エラーなし
のようでした。
・wwwあり▶エラー
・wwwなし▶エラーなし
のようでした。
こちら(jqueryでのCORSエラー)の説明では、
「CORS(Cross-Origin Resource Sharing)は、異なるドメイン名であるにもかかわらず、あるサイトが別のサイトのリソースにアクセスできるようにするHTML5機能です。」
とあるので、今回の場合は、「wwwあり」が「wwwなし」からBootstrapやFont Awesomeにアクセスしようとしてエラーが出たのかな?と推測します(間違ってるかもしれませんが)。
解決方法その1:どのアドレスからでもアクセス可能にする
HTML内のヘッダーの一番上にこれを追加するだけです。
PHP
<? php header("Access-Control-Allow-Origin: *"); ?>
アップしてしばらくすると(5分ぐらい)反映されます。
解決方法その2:URLを正規化する
今回はwwwの有無でエラーになったので.htaccessを使用してサイトURLをwwwあり/なしで統一して解決する方法も良いと思います(SEO的にも良いはず)。
サーバ内の一番上のフォルダに.htaccessというファイルがあるのでそれを編集します。※このファイルは重要なので、いつでも戻れるようにバックアップを取っておいてください。
サーバ内の一番上のフォルダに.htaccessというファイルがあるのでそれを編集します。※このファイルは重要なので、いつでも戻れるようにバックアップを取っておいてください。
.htaccessに以下を記述します。
wwwありにしたい場合
.htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
wwwなしにしたい場合
.htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
※どちらもアドレスをいじらずにそのままコピペでOKです。
WordPressを使用したサイトの場合
WPを使用したサイトの場合、元々.htaccessに以下のような文章が入っていると思います。
# BEGIN WordPress
〜〜〜中略〜〜〜
# END WordPress
〜〜〜中略〜〜〜
# END WordPress
先程の記述を #BEGIN WordPress の上に追加してください。
WPはダッシュボード▶設定▶一般からサイトのURLを指定する所があるので、そちらも合わせて確認してもらえると良いと思います。
記述したら.htaccessをアップし、サイトを確認してみてください。
URLの前にwwwあり/なしでアクセスしてみて、自分の指定した方にリダイレクトされれば成功です。
URLの前にwwwあり/なしでアクセスしてみて、自分の指定した方にリダイレクトされれば成功です。