概要
Djangoアプリで「because its MIME type ('text/html') is not executable...
」というエラーになりました。こちらの原因と解決方法を記載します。
原因
コンソールに表示されたエラー内容は以下です。
Refused to execute script from 'http://localhost/login/?next=xxxxx.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.
login/...
から始まるパスになっていますが、実際にアクセスしたのは、そんなパスではないです。
なぜかlogin/...
にリダイレクトされてしまっている、という状況です。
なぜだろう?と思ってプロジェクトディレクトリのurls.py
をよく見てみると、
path('', admin.site.urls)
上記のように記載がありました。
ルートURL(空のパス)がDjangoのadmin(管理)サイトに飛ぶようにマッピングされてしまっています。
これが原因でした。
これにより、アプリケーションの他のすべてのURLも管理サイトにリダイレクトされてしまい、静的ファイルのリクエストも含め、アクセスがすべてlogin/?next=...
にリダイレクトされることになっていたのです。
解決方法
以下のようにadmin/
パスに設定することで、ルートURLが管理サイトと重複せず、意図通りに機能するようになりました。
path('admin/', admin.site.urls)
ただ、「because its MIME type ('text/html') is not executable...
」エラーを調べてみると、いろいろなところで原因が様々上がっており、場合によっては原因不明というのも見かけます。というのも、実際にエラーが起きているのはDjango側の設定のどこかであって、「MIMEタイプ(ファイルの種類)がサポートされていない」エラーというわけではないことが多いからでしょう。要はエラーメッセージだけでは原因特定が難しいのではないかと思われます。
今回の私の解決方法は一例に過ぎませんが、
・urls
設定が間違っていないか
・正しいかパスか
・タイプミスがないか
・最近いじった箇所で怪しいところがないか
などを見直していくとヒントがあるかもしれません。
(admin参考)