.htaccess で別ドメインから画像やスクリプトファイルへの直リンク禁止する方法

アクセス解析を見ていると、思いもよらないファイルに直リンクされている時があります。
大半は方法がよくわからずソースのままコピーしてしまい、悪気があって行っているものではないと願いたいのですが、意図しないメディアファイルやスクリプトファイルへ直リンクされるのは、受ける側としては気分がいいものではありません。
過去にはこのサイトの jQuery ファイルへ、直リンクが張られていたこともありました。流石にそういったファイルへ直リンクするのは勘弁して欲しく、仕方なく別ドメインからスクリプトファイルへ直接参照されたファイルに対してアクセスを拒否するように .htaccess ファイルへ設定を行いました。
直リンクを禁止する .htaccess への設定内容
全てのファイルに対する直リンク拒否設定
特にファイルの種類を区別せず、特定の URL (https://webllica.com) 以外からアクセスされた場合に拒否する方法です。利用する際は URL 部分を自身のサイトのアドレスへ変更してください。
SetEnvIf Referer "^https://webllica\.com" ref001 SetEnvIf Referer "^$" ref001 order deny,allow deny from all allow from env=ref001
この .htaccess の配置する場所は、例えば画像に対するアクセス拒否を行うのであれば、画像ファイルが格納されているフォルダの直下に置きます。そのフォルダ内に更にフォルダが格納されていても .htaccess を格納する必要はありません。上位フォルダに設定したものが下位フォルダまで適用されますので。
2行目の内容はリファラが無い場合、つまりアクセス元が分からない場合に表示できるようにする為のものです。例えばアドレスバーへ直接入力してアクセスしたり、リファラを返さないプロキシサーバー経由でアクセスした場合に該当します。それらについてもアクセス拒否するのであれば、2行目に設定した以下の内容は削除してください。
SetEnvIf Referer "^$" ref001
複数のリンク元からのアクセスを許容する設定
前述のコードはある1つのドメインからのアクセスを許容する設定ですが、次のように複数指定してあげることで許可するドメインを増やすことができます。
SetEnvIf Referer "^https://webllica\.com" ref001 SetEnvIf Referer "^https://nj-clucker\.com" ref001 SetEnvIf Referer "^$" ref001 order deny,allow deny from all allow from env=ref001
複数のドメインを運営していて、それぞれ共通ファイルを参照しているような場合は、このように設定しておきましょう。
ファイルの種類(拡張子)を指定して直リンクを禁止する方法
例えばスクリプトファイルは直リンクを禁止しても、画像ファイルは許容するといったケースもあります。ファイルの種類によってアクセス拒否の設定を変える場合、拡張子を指定して分岐させることで、一部のファイルだけ直リンク禁止にできます。
以下、JavaScript とスタイルシートのファイルに限り直アクセスを禁止する設定になります。
<Files ~ ".(js|css)$"> SetEnvIf Referer "^https://webllica\.com" ref001 SetEnvIf Referer "^$" ref001 order deny,allow deny from all allow from env=ref001 </Files>
一行目の設定が、拡張子「.js」と「.css」に対する条件分岐となります。パイプ(|)でつないであげることで、複数の拡張子を指定できます。もし画像ファイルのみ適用させるなら、つぎのように画像系の拡張子を設定しましょう。
<Files ~ ".(gif|jpg|jpeg|png)$">
画像ファイルを直リンク禁止設定する際の注意点
画像ファイルに直接アクセスされるケースは、外部のサイトやブログだけには限りません。検索サイトのキャッシュページ等も含まれます。検索サイトからの流入が多いサイトであれば、下手に画像の直リンク拒否を設定してしまうのは SEO 的にデメリットになることも考えられます。
検索サイトの画像検索に表示されるようにするには、次のように Google や Yahoo、bing からのアクセスは許可するように設定してあげます。
SetEnvIf Referer "^https://webllica\.com" ref001 SetEnvIf Referer "google" ref001 SetEnvIf Referer "yahoo" ref001 SetEnvIf Referer "bing" ref001 SetEnvIf Referer "^$" ref001 order deny,allow deny from all allow from env=ref001
ただし、この設定はそれぞれの検索サイトのドメインを直接指定したものではありません。アクセス元の URL(リファラ)の一部に、該当の文字列が含まれる場合はアクセス許可の扱いになるので、その点はご了承ください。