WordPress でアップロードした画像への直リンクを禁止する方法

更新日: 公開日:2016/10/05

ブログを運営する上で困ることの1つである画像の直リンク。自分がアップロードした画像の URL を直接参照されるため、自身が借りているサーバーへの負荷にも影響を及ぼします。

このような自体を招く原因は、キュレーションサイトやバイラルメディアが増えたことではないでしょうか。自分の利益の為に、全く悪びれず引用だけで構成されるゴミ記事が量産されるようになり、その影響によって引用として記せば画像を勝手に使って良い考える非常識な人が増えてたことが要因していると考えれます。

直リンクされているか否かは、自らエゴサーチをするかアクセス解析して見つけるしか方法がありません。僕の場合は、アクセス解析から偶然見つけましたが、自分が撮った写真を記事の一部として何事もなく使われているのを知った時は、ただただショックでした。

サイト管理者に直接連絡を取る手段もなかったので、.htaccess ファイルを作成し、画像の直リンクを完全にシャットアウトするべく対策を講じました。

WordPress で外部から画像への直リンクを禁止する方法

直リンクを禁じるには WordPress のプラグインで対処することはできません。プラグインはあくまで WordPress が動いている環境下において機能するものなので、画像ファイルにダイレクトにアクセスされた場合は、プラグインのプログラムを動かすことができないのです。

直リンクを禁止するまでの手順は次の通りです。

  1. テキストエディタを開く
  2. 画像への直リンク禁止の記述を行う
  3. ファイル名を .htaccess として保存
  4. サーバーの画像フォルダに .htaccess をアップロードする

テキストエディタで直リンク禁止処理を書く

テキストエディタを開き、以下の内容をコピペしてください。# で始まる行はコメントとして扱われるので、削除しても構いません。ただし5行目の URL の部分 webllica.com は自身のサイトに合わせて書き換えてください。

# 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]
# SNS からの画像参照を許可
RewriteCond %{HTTP_USER_AGENT} !(twitter|facebookexternalhit|google) [NC]
# bot のアクセスを許可
RewriteCond %{HTTP_USER_AGENT} !(|googlebot|yahoo|bingbot) [NC]
# 直リンク禁止ファイルアクセス時にエラーを返す
RewriteRule \.(jpg|png|gif)$ - [F]

名前を付けてファイルを保存

URL を書き換えたらファイルを保存します。ファイル名は必ず「.htaccess」としてください。Windows の場合、ドットから始まるファイル名を作成するには、テキストエディタの保存時に名前を付けるしか方法が無いので注意してください。

Windows で .htaccess を作成すると「ファイル名を入力してください」とエラーになる場合の対処法
Windows で .htaccess を作成すると「ファイル名を入力してください」とエラーになる場合の対処法
https://nj-clucker.com/windows-make-htaccess-file/

画像直リンク禁止処理の内容

上記で作成したファイルで、具体的にどのようなことを行っているのか、一行ずつ説明していきましょう。場合によって内容を書き換える必要があるので、必ず以下の説明を一読するようにしてください。

RewriteEngine の有効化

まずは RewriteEngine と呼ばれるアドレスの書き換え機能を有効化します。

# 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]

自身のサイトも記載しないと画像が表示されなくなるため注意してください。5行目は自身のサイトの URL に書き換えられているか必ずチェックしてください。

上記のように何行でも追加することができます。google や yahoo、bing の記述部分は、検索サイトの画像検索において表示することを許可することを示します。

もし画像検索の結果にも表示させたくないのであれば、これらの行を削除してください。最後の search\?q=cache は、検索サイトのキャッシュ表示時に画像表示を許可するか否かを識別するものです。こちらもキャッシュ表示時に画像を表示させないのであれば削除しましょう。

上記の記述では、アクセス元が無い場合も NG としているため、アドレスバーに直接画像の URL を入力してアクセスしても表示されなくなります。もし直接入力を許可するのであれば、次の内容を 10行目 に追記してください。

# アドレスバー直打ち(リファラーなし)を許容
RewriteCond %{HTTP_REFERER} !^$

https から始まるサイトから直リンクされた場合、リファラー情報がないため、この条件に合致して直リンクが許容されてしまいます。リファラーなしのサイトからのアクセスも増えているため、個人的にはこの記述を書かないことをおすすめします。

各 SNS からのアクセスを許可

続いて SNS からのアクセスを許可する設定です。Facebook や Twitter、Google+ に投稿した際に、カード形式で表示できるようにするには画像へのアクセスを許可しておく必要があります。こちらは許可しておかないと、サイトの宣伝効果がマイナスに働いてしまうので、必ず許可しておくようにしましょう。

# SNS からの画像参照を許可
RewriteCond %{HTTP_USER_AGENT} !(twitter|facebookexternalhit|google) [NC]

検索用 bot のアクセスを許可

こちらは検索サイトの bot を許容する設定です。大手検索サイトへの画像掲載はメリットもあるので、設定しておいた方がプラスになります。どうしても画像をパクられたくなければ、bot を許可しないのも選択肢の1つです。

# bot のアクセスを許可
RewriteCond %{HTTP_USER_AGENT} !(|googlebot|yahoo|bingbot) [NC]

許可しない場合は、この2行を丸ごと削除してください。

直リンク禁止の対象ファイル

最後に条件を満たしたサイトに対して、直リンクを禁止する対象ファイルの情報を明記します。

# 直リンク禁止ファイルアクセス時にエラーを返す
RewriteRule \.(jpg|png|gif)$ - [F]

RewriteRule は必ず一番最後に記述してください。この例では、拡張子が jpg、png、gif の場合に 403 エラーを返す仕組みになります。処理上は画像読み込みエラーとなるので、直リンクしているサイト上には何も表示されなくなります。

直リンク時に別の画像へ差し替える方法

一番最後の RewriteRule を書き換えることで、エラーを返却せず、任意の画像を表示させることが可能になります。例えば、直リンクで貼り付けられた画像を、次の画像に差し替える設定を見ていきましょう。

直リンク禁止画像

ファイルの URL は「https://webllica.com/wp-content/uploads/ng.png」になります。差し替え対象の画像は各々用意してください。

WordPress のアップロード機能を使ってファイルをアップして大丈夫です。画像ファイルの URL だけメモしておいてください。

前述の内容の15行目にある RewriteCond で始まる内容を、次のように書き換えます。

# 直リンク時に指定の画像を表示する
RewriteCond %{REQUEST_URI} !^https://webllica\.com/wp-content/uploads/ng\.png$
RewriteRule \.(jpg|png|gif)$ https://webllica.com/wp-content/uploads/ng.png [NC,R,L]

RewriteCond の設定により、対象の画像への直リンクは OK としておきます。この時、アドレス内にある全てのドット(ピリオド)の手前に、半角の円マーク「\」を付けるのを忘れないでください。ここだけアドレスの記述ルールが異なります。

そして最後に RewriteRule として jpg、png、gif の画像ファイルに直リンクしている場合、ng.png ファイルを表示するように処理を書けば完成です。

サーバーに .htaccess をアップロード

完成した .htaccess ファイルを WordPress がインストールされているサーバーの画像フォルダへアップロードします。

通常の設定であれば、画像ファイルを保存しているフォルダは以下のパスになります。月別にフォルダが別れている場合でも、uploads フォルダ直下に .htaccess ファイルを置いておけば、下位の全てのフォルダに適用されます。

(WordPressインストール先)\wp-content\uploads

アップロード先のフォルダに、.htaccess のファイルが既にある場合は注意が必要です。そのファイルを上書きせず、一度ダウンロードしてから、ファイル内に上記内容を追記した上で、アップロード&上書きしてください。

以上、WordPress でアップロードした画像への直リンクを禁止する方法でした。

最新の更新情報は、Twitter、Facebook、Freedly にてお届け!

NJ-CLUCKER RSS

このブログの運営者

NJ

元システムエンジニアから、個人事業主として独立。Web サイト運営、動画制作など活動の場を広げています。このブログでは、困ってたどり着いた人に、分かりやすく答えを提供できるように心掛けています。

更新情報は、Twitter や Facebook ページを参照ください。フォローお待ちしています。