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

2016/01/12

deny-requests-from-another-domains-by-htaccess01

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

過去にはこのサイトの 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 の扱いになりますので、その点はご了承ください。

2017/01/22

個人事業主の開業届と青色申告の申請書を税務署へ提出!持ち物はマイナンバーカードを忘れずに!

2017/01/21

Chrome に表示された「保護された通信」「保護されない通信」とは?保護されないのは危険なのか?

2017/01/21

Word ファイルから画質を落とさず画像を取り出す方法

2017/01/20

Windows 10 でアプリをアンインストール(削除)する方法

2017/01/20

Windows 10 でデスクトップにマイコンピューターやコントロールパネルを表示する方法

2017/01/20

ファイアーエムブレムヒーローズのダウンロード方法とインストール手順【初期設定】

2017/01/17

青色申告の申請書「所得税の青色申告承認申請書」の書き方!例にならって入力すれば簡単に作成できる

2017/01/16

個人事業の開業届の書き方!例にならって入力すれば簡単に作成できる

2017/01/14

Nintendo Switch のコントローラーの充電方法は?標準の Joy-Con グリップでは充電できないので注意!

2017/01/14

Nintendo Switch の本体容量は 32GB しかない!容量追加はマイクロSDカードを利用する

→もっと見る

Name :
気力/体力勝負なシステム業界で揉まれています。自分が自分らしくあるために、大事なリセット、スタートします。

プロフィール詳細 Twitter @_NJ69_
Facebook ページ nj-clucker.com シェア
このブログが役に立ったら
「いいね!」お願いします
PAGE TOP ↑