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

2016/01/12

アクセス解析を見ていると、思いもよらないファイルに直リンクされている時があります。大半は方法がよくわからずソースのままコピーしてしまい、悪気があって行っているものではないと願いたいのですが、意図しないメディアファイルやスクリプトファイルへ直リンクされるのは、受ける側としては気分がいいものではありません。

過去にはこのサイトの jQuery ファイルへ直リンクが張られていたこともありました。流石にそういったファイルへ直リンクするのは勘弁して欲しく、仕方なく別ドメインからスクリプトファイルへダイレクトにアクセスされた場合にアクセスを拒否するように .htaccess ファイルへ設定を行いました。

直リンクを禁止する .htaccess への設定内容

全てのファイルに対する直リンク拒否設定

特にファイルの種類を区別せず、特定の URL (http://nj-clucker.com) 以外からアクセスされた場合に拒否する方法です。利用する際は URL 部分を自身のサイトのアドレスへ変更してください。

SetEnvIf Referer "^http://nj-clucker\.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 "^http://nj-clucker\.com" ref001
SetEnvIf Referer "^http://clav7\.com" ref001
SetEnvIf Referer "^$" ref001
order deny,allow
deny from all
allow from env=ref001

複数ドメインを運営していて共通ファイルを参照しているような場合は、このように設定してあげると良いでしょう。

ファイルの種類(拡張子)を指定して直リンクを禁止する方法

例えばスクリプトファイルは直リンクを禁止しても、画像ファイルは許容する等、種類によって設定を変えたいけれど全て同じフォルダに入ってしまっている場合、拡張子を指定して分岐させることで、一部のファイルだけ直リンク禁止にさせることができます。

以下、JavaScript とスタイルシートのファイルに限り直アクセスを禁止する設定になります。

<Files ~ ".(js|css)$">
SetEnvIf Referer "^http://nj-clucker\.com" ref001
SetEnvIf Referer "^$" ref001
order deny,allow
deny from all
allow from env=ref001
</Files>

一行目の設定が、拡張子「.js」と「.css」に対する条件分岐となります。パイプ(|)でつないであげることで、複数の拡張子を設定してあげることができます。逆に画像ファイルのみ適用さえるのであれば、つぎのように画像系の拡張子を設定すれば良いです。

<Files ~ ".(gif|jpg|jpeg|png)$">

画像ファイルを直リンク禁止設定する際の注意点

ダイレクトに画像へリンクが張られるのは他人のサイトやブログだけでなく、検索サイトのキャッシュページ等も含まれます。検索サイトからの流入が多いサイトであれば、下手に画像の直リンクを設定してしまうのはデメリットに成り兼ねません。

検索サイト等の画像検索に表示されるようにするには、次のように Google や Yahoo、bing からのアクセスに関しては許容対象に入れてしまえば良いでしょう。

SetEnvIf Referer "^http://nj-clucker\.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

ただし、この設定はそれぞれの検索サイトのドメインを直接指定したものではないので、サブドメイン等に該当の文字列が含まれる場合はアクセス OK の扱いになりますので、その点はご了承ください。

このブログの運営者

気力・体力勝負なシステム業界のエンジニアを経て、個人事業主として独立。Web サイト運営、動画制作など活動の場を広げています。目指すところへの道のりは険しいですが、自分が自分らしくあるために、一歩ずつ進んでいきます!

このブログでは、困ってたどり着いた人に、分かりやすく答えを提供できるように心掛けています。更新情報は、Twitter や Facebook ページを参照ください。よろしければフォローお待ちしています。

Facebook ページ NJ-CLUCKER
このブログが役に立ったら
「いいね!」お願いします

最近のエントリー

Switch の画面がオレンジになって動かなくなった場合の対処法の1つ!セーブデータを保持したまま本体を初期化する!

プラグインを使わず WordPress の投稿ページで PHP の外部ファイルを呼び出す方法

Feedly ボタンが機能していない?!正しい URL の情報に変更する方法

Twitter で過去のツイートを閲覧・削除する方法

赤ちゃんが泣き止む動画「ふかふかかふかのうた」は生後3ヶ月の赤ちゃんにも効果抜群だった!

これで迷わない!東京ディズニーランドの喫煙所マップ一覧【写真付き】

iTunes でアートワークが反映されないのは WAV 形式が原因!AAC に変換すれば反映される!

【徹底比較】WiMAX 2+ ギガ放題プランの最安値はどこ?【2017年10月版】

おすすめのモバイルルーター・ポケット WiFi を比較!選ぶポイントは利用目的に合わせること!

公共料金の支払いはクレジットカードと口座振替のどっちがお得?