【.htaccess】 サーバーにあるファイルへの直リンクを拒否する

この記事は約3分で読めます。
記事内に広告が含まれています

コーディングのイメージ

こんにちは、さち です。

今回は、サーバーに置いてある「ファイル」に直リンク(直接リンク)してくるアクセスを拒否する方法について書いていきます。

スポンサーリンク

直リンクを拒否する方法

.htaccess」ファイルを使って、「画像」への直リンクをアクセス拒否してみます。

自分のサイトを example.com としたとき、「.htaccess」の中身はこんな感じになります。

<FilesMatch "\.(gif|png|jpe?g|webp)$">
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^(https?://)?([^./?]+\.)?example\.com
RewriteRule ^.*$ - [R=403,L]
</FilesMatch>

アクセス元(直前に見ていた)ページの「URL」が分かるリファラ %{HTTP_REFERER} を使って、自分のサイトのドメイン example.com でない場合は、「アクセス拒否(403)」をしています。

仕組みとしては、以前の記事で紹介した「ファイルへのアクセスを制限する方法」と「直リンクを拒否する方法」を組み合わせたものです。

それぞれの使い方の詳細は、下記のリンク先を参考にして下さい。

→ ファイルへのアクセスを制限する方法(.htaccess)

→ 直リンクを拒否する方法(.htaccess)

注意点

リファラ」は常に送られるとは限りません

ウェブブラウザーの種類やバージョンによっては、次のような場合にリファラを取得できません(空白参照になる)。注意して下さい。

リファラを取得できないアクセス
  • SSL化していない(http://)ページからのアクセス
  • rel="noreferrer" が付いたリンクからのアクセス
  • URL を手入力してのアクセス
  • ブックマークからのアクセス

特に、「SSL化していない(http://)」ページからのアクセスについては、この仕様を知らないと他に原因があると勘違いして、時間を浪費する危険があります。

多くのサーバーでは、無料で SSL(https)化できるようになっています。SSL 化していないと検索エンジンからの評価も下がりますし、この機会に SSL化 しましょう。作業は一度だけですし。

アクセス拒否時に開くページの指定

アクセス拒否(403 Forbidden)した時に代わりに開くページを指定することで、直リンクを拒否したことを知らせることもできます。

指定方法の詳細についてはこちらの記事で紹介しています。

何となくで使ってた「.htaccess」について勉強し直す
こんにちは、さち です。先日、prepreset GENERATOR でエラーが出るとコメントを頂き、修正をしていました。原因は CGI が正常動作していないことだったんですが、その原因の根源は「.htaccess」ファイルにありました。た

コメント

タイトルとURLをコピーしました