WordPressに限ったことではないのですが、ブラウザ上に表示された圧縮ファイルへのリンクを表示させると、リンクアドレスをコピーして別タブでアクセスすると簡単にダウンロードできるようになっています。
これを利用して、圧縮ファイルのリンクをボタンなどに設定して、自由にダウンロードできるようにしているサイトも数多くあります。
ただこの機能はちょっとやっかいで、他のサイトであたかも自身で作成した圧縮ファイルのようにダウンロードボタンを設置されたりして、いわゆるコンテンツ泥棒となる行為が発生します。
これをホットリンクと言いますが大変迷惑な行為ですね。
今回は、これに対抗するため、WordPressにおいて、メディアにファイルを保存しているサイトでのみ表示やダウンロードを可能にし、他のサイトからの直接アクセス(ホットリンク)をすべて拒否する方法を紹介します。
本ページで可能となるのは圧縮ファイルに対する制御のみで、画像では動作しませんでした。またその他の形式のファイルについてはテストしていません
特定の圧縮ファイルへの外部からのアクセスを拒否する方法
.htaccessファイルを準備する
他でたくさん紹介されている同類のコードと同様に.htaccessというファイルへ必要な事項を追加していきます。
こう書くとWordPressのカスタマイズをいろいろされている方なら、ルート(index.phpがある場所)にある.htaccessに追記すればいいのね!と手が動くかも知れませんがそれでは動作しません。
設置するのは「wp-content」→「uploads」フォルダの中です。パソコン上で空の.htaccessというファイルを作成してアップロードしてください。
既に存在する場合にはそのファイルへ追記します
コードを追加する
前項で設置した、または既存の.htaccessファイルへ以下を追加します。
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^トップページのURL/ [NC]
RewriteRule .? - [S=無視する個数]
RewriteRule 拒否するファイル1 - [NC,L,F]
RewriteRule 拒否するファイル2 - [NC,L,F]
「トップページのURL」には、文字通りサイトのトップページのURLへ書き換えます。
「拒否するファイル1」「拒否するファイル2」には、「/uploads/」以下のファイルURLへ書き換えます。
例:「https://habone.biz/wp-content/uploads/2024/10/〇〇.zip」なら「2024/10/〇〇.zip」へ書き換えます
上記のコード例では2つのファイルを指定していますので、「無視する個数」のところを「2」へ書き換えます。
「無視する個数」の行を記述することで、条件に合致した場合(このケースでは参照元(リファラ)がトップページのURLに合致した場合)に指定行数分処理を無視することができ、その行の下に書かれた内容によって誤動作を起こすことがないようにできます
追記と書き換えが終わったら、サイト内のリンクからzip形式のファイルならきちんとダウンロードが開始されるか、また、ファイルのURLを直接アドレスバーに入れてアクセスしたら403エラーとなるかをチェックしてください。
再度書きますが、この記述は「wp-content」→「uploads」フォルダの中にある.htaccessファイルに追記しないと動作しません
管理が大変ならプラグインを使うとよい
実はここまで紹介したコードは、以下のプラグインのソースや吐き出すコードを解読したものです。
このプラグインを使えば、下図のように管理画面のメディア編集から「Hotlink Protection」にチェックを入れるだけで、前述のコードを書きだしてくれ、きちんとアクセス拒否してくれます。

どうしても自前でコードを書きたい、プラグインは使いたくないという方以外はこれを使った方がよっぽど管理が楽ですし、確実だと思います。
コメントを残す