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

更新日: 公開日:2016/01/12
外部ドメインからの直リンクを拒否

アクセス解析を見ていると、思いもよらないファイルに直リンクされている時があります。

画像の載せ方がわからずソースをそのままコピーしてしまった、悪気のない直リンクであると願いたいところですが、実際そのようなケースはほぼ皆無です。画像系メディアファイルに始まり、スクリプトのようなプログラムファイルなど、直リンクされるのは気分の良いものではありません。

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

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

いくつかサンプルプログラムとして用意するので、必要に応じて参考にしていただければと思います。ただしそれぞれ導入する上での注意事項もあります。ご注意ください。

どの .htaccess を編集するのか?

例えば画像に対するアクセス拒否を行うのであれば、画像ファイルが格納されているフォルダの直下にある .htaccess のファイルを編集します。もしくはルートドメインの .htaccess ファイルに追加しても問題ありません。

もしファイルが存在しなければ、メモ帳でファイルを作れます。ファイル保存のタイミングで、ファイルの種類を [すべてのファイル] に変更するのがポイントです。

では具体的な内容に移ります。

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

特にファイルの種類を区別せず、特定の URL (https://webllica.com) 以外からアクセスされた場合に拒否する方法です。利用する際は、4行目の URL を自身のサイトにあわせて変更してください。

# URL 書き換え処理を ON にする
RewriteEngine on
# 条件:直リンク許可サイト以外からアクセス
RewriteCond %{HTTP_REFERER} !^http(s)?://webllica.com [NC]
# 処理:直リンク禁止ファイルアクセス時にエラーを返す
RewriteRule \.(jpg|jpeg|png|gif|webp|js|css)$ - [F]

この処理は webllica.com から参照された場合のみ、拡張子が以下のファイルに対してアクセスを許可します。

  • jpg
  • jpeg
  • png
  • gif
  • webp
  • js
  • css

6行目の処理を書き換えれば、他の拡張子も対象にできます。

この処理のデメリットは、アドレスバーに URL 直打ちすると参照元なしの扱いになってエラーが発生します。画像ファイルなど、URL の直打ちで参照できるようにするには、次のように実装します。

【拡張】URL 直打ちを許可

# URL 書き換え処理を ON にする
RewriteEngine on
# 条件:直リンク許可サイト以外からアクセス
RewriteCond %{HTTP_REFERER} !^http(s)?://webllica.com [NC]
RewriteCond %{HTTP_REFERER} !^$
# 処理:直リンク禁止ファイルアクセス時にエラーを返す
RewriteRule \.(jpg|jpeg|png|gif|webp|js|css)$ - [F]

5行目に追加したのが、参照元なし(リファラーなし)でファイル表示できるようにする処理です。

この場合、リファラを返さないプロキシサーバー経由で参照されると、直リンクできてしまうのがデメリットです。ただ、そこまで意識した直リンク制御は不要だと思っています。

【拡張】複数のリンク元からのアクセスを許容

最初に指定した webllica.com 以外のドメインに対して、追加で直リンクを許可する方法は RewriteCond の条件を増やして対応します。

# URL 書き換え処理を ON にする
RewriteEngine on
# 条件:直リンク許可サイト以外からアクセス
RewriteCond %{HTTP_REFERER} !^http(s)?://webllica.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://nj-clucker.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://nj-works.com [NC]
RewriteCond %{HTTP_REFERER} !^$
# 処理:直リンク禁止ファイルアクセス時にエラーを返す
RewriteRule \.(jpg|jpeg|png|gif|webp|js|css)$ - [F]

例として nj-clucker.com と nj-works.com を参照許可するように設定しました。複数のドメインを運営していて、それぞれ共通ファイルを参照しているような場合は、このように設定しておきましょう。

直リンク禁止設定の注意事項

最後に .htaccess で直リンク拒否するなら抑えておきたい内容を記しておきます。

検索サイトのキャッシュについて

画像やスクリプトへの直リンクは、ブログや外部の一般サイトだけではありません。Google などの検索サイトのキャッシュページにおいても、直リンクとして判断される場合があります。

つまり検索サイトからの参照において、全面的に直リンクを拒否してしまうと SEO 的にデメリットになることも考えられます。同様に Twitter や Facebook のような SNS においても、直リンク拒否がマイナスに働くことがあります。

経験上、ある程度のメジャーなサイトからの直リンクは、許可しておいたほうがプラスになることが多いです。例に挙げたようなサイトを許可するのであれば、次のような記述すれば対応できます。

# URL 書き換え処理を ON にする
RewriteEngine on
# 条件:直リンク許可サイト以外からアクセス
RewriteCond %{HTTP_REFERER} !^http(s)?://webllica.com [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteCond %{HTTP_REFERER} !bing\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteCond %{HTTP_USER_AGENT} !(twitter|Twitterbot|facebookexternalhit|fbcdn|google|hatena) [NC]
RewriteCond %{HTTP_REFERER} !^$
# 処理:直リンク禁止ファイルアクセス時にエラーを返す
RewriteRule \.(jpg|jpeg|png|gif|webp|js|css)$ - [F]

ただしこの設定は、それぞれの検索サイトのドメインを直接指定したものではありません。アクセス元の URL(リファラ)の一部に、該当の文字列が含まれる場合、参照を許可しています。

直リンク拒否は厳しくしても、自分にとってプラスになることは少ないです。あまり厳しくしすぎないよう、程よい加減で行ってください。

この記事をシェアする

このブログの運営者

NJ

元システムエンジニア。個人事業主として独立して Web サイト運営、ポップデザインや動画制作など、パソコンでモノづくりしています。