plusN コーディングとか育児とかの個人ブログ

.htaccessで画像への直アクセスを禁止する方法

PR

そもそも .htaccess とは?

.htaccess は、Apache が利用されているサーバー環境で、ディレクトリ単位に Web サーバーの挙動を制御できる設定ファイルです。
ただし、利用によってはパフォーマンス低下やセキュリティ上のリスクが生じるため、httpd.conf などサーバー全体の設定ファイルにアクセスできる場合は、そちらで設定する方が望ましいとされています。
一方、レンタルサーバーなどでルート権限がない場合は、.htaccess を使うことで必要な制御を行うことができます。

.htaccess で画像へのアクセス制限をしてみる

今回は、レンタルサーバーで.htaccessを使い画像へのアクセス制限を行います。また、検索エンジンに画像がクロールされないように設定も行いたいと思います。

[ 手順 1 ] サイト以外からのアクセスは全て遮断

自サイト以外からのアクセスを遮断する必要がある場合は、以下のように記述します。

RewriteEngine On

# 自サイトからの参照だけ許可(http, https 両方)
RewriteCond %{HTTP_REFERER} !^https?://example\.com [NC]

# 画像直リンクは 404 を返す
RewriteRule \.(jpg|jpeg|png|gif|svg)$ - [R=404,L]

これで他サイトからの直リンクや、リファラなし(直打ちやLINE経由など) も全部 404 になります。
なお、上記コードをコピペする場合は、「example.com」と「jpg|jpeg|png|gif|svg」の部分は必要に応じて変更してください。

[ 手順 2 ] robots.txt で制御

robots.txtに、指定ディレクトリ以下のファイルを検索エンジンがクロールしないように以下を記述します。

User-agent: *
Disallow: /images/secure/

※ /images/secure/ の部分は必要に応じて変更してください。

[ 手順 3 ] X-Robots-Tag ヘッダで noindex

検索エンジン側に、特定拡張子をクロールしない設定も記述します。こうする事で、検索側にファイルが表示される心配がなくなります。

<FilesMatch "\.(pdf|jpg|jpeg|png|gif|svg)$">
    Header set X-Robots-Tag "noindex, nofollow"
</FilesMatch>

※ pdf|jpg|jpeg|png|gif|svg の部分は必要に応じて変更してください。

なお、過去にインデックスされたものにnoindex等を設定する場合、すぐには消えません。
もし、「早めに消したい」なら、Search Console を活用する事をオススメします。

[ 手順 4 ] 設定が合っているか確認してみる

上記の設定が実行されているか確認する方法として、Google Search Consoleやブラウザの開発ツールなどの方法があります。今回は、ターミナルで確認してようと思います。

レスポンスヘッダを確認する場合

curl -I  'https://example.com/images/xxxx/image.jpg'

レスポンス 先頭行: HTTP/1.1 404 Not Found

HTTP/1.1 404 Not Found と返って来れば、設定が反映されています。

自サイトからの参照を確認する場合

curl -I -e 'https://example.com/page' 'https://example.com/images/xxxx/image.jpg'

レスポンス 先頭行: HTTP/1.1 200 OK

上記のようなレスポンスが返って来れば、設定は完了です。

特定ページでのみファイルを閲覧できるようにしたい場合

特定のページに掲載している画像やファイルに制限をかけたい場合は、以下のように記述します。

<FilesMatch "\.(pdf)$">
    RewriteEngine On
    # 自ページ(https://example.com/secure)からのアクセスは許可
    RewriteCond %{HTTP_REFERER} ^https?://(www\.)?example\.com/secure [NC]
    RewriteRule .* - [L]

    # それ以外は 404 にする
    RewriteRule .* - [R=404,L]
</FilesMatch>

上記は、https://example.com/secureに掲載しているPDFに対する閲覧制限です。RewriteCond %{HTTP_REFERER} で参照元をチェックし、一致していた場合のみ表示します。

この記述の注意点

  • 一部のブラウザやセキュリティソフトではリファラが送れないことがあります
    その場合、「正しいページ」からでも閲覧できない可能性があります
  • 厳密に守る必要がある場合、この方法は向いていません
    簡易認証やトークン付きURL等を検討した方が良いです

まとめ

.htaccess で、画像やファイルへの制限をかける方法を紹介しました。パスワード制限等のあるページに対する画像やファイルは、

  • 保管場所を非公開ディレクトリにする
    URLを推測されにくい場所に置き、.htaccessで直アクセスをブロックしページ経由のみ許可する
  • ファイル名をユニーク化する
    分かりやすい名前ではなく、document-20250924-xyz123.pdfのようにすると安心
  • トークン方式を検討
    制限ページからリンクを生成する時に、一時的なトークン付きURLにして配布する
    一定時間で無効になるので、直リンクが共有されても安全

など、もう一段階上の制限や方法を考えた方が良さそうです。

PR