勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

画像やPDF等のファイルへの直接アクセスは禁止し、PHP経由のみ表示やダウンロードを可能にする

   2024/01/12  Apache サーバー

ファイルアップローダーを作成する案件があり、アップロードしたファイルは「https://test.com/file/001」みたいな形でアクセスすることでダウンロードさせたかった。また、「https://test.com/test.jpg」のようにURLを打ち込むと、通常アップロードしたファイルがブラウザ上で表示されるがこちらは禁止したかった。以下に対応方法をメモ。

 

htaccessファイル

SetEnvIf Referer "^https://test\.com" ref_ok
Order Deny,Allow
Deny from all
Allow from env=ref_ok

画像等をアップロードするディレクトリに上記htaccessファイルを設置することで、直接URLを打ち込んでもブラウザ上では表示されなくなる。ドメイン部分は適宜変更する。

 

PHP経由でダウンロード

//ファイルの指定
$file_name = 'test.pdf';
$file = './file/' . $file_name;
$file_info = pathinfo($file);

//ファイルタイプ(MIMEタイプ)を指定
header('Content-Type: application/' . $file_info);

// ダウンロードするダイアログを出力
header("Content-Disposition: attachment; filename=" . $file_name);

//ファイルサイズを取得
header('Content-Length: '.filesize($file));

// ファイルを読み込んで出力
readfile($file);
 
exit();

ファイル名やパスは適宜変更する。

 

所感

PHP経由でダウンロードというのは過去にも何度か扱ったものの、htaccess部分は対応したことが無かったので勉強になった。

 

参考サイト

https://info-con.co.jp/tips/htaccess-01-access_referer/

 - Apache サーバー

  関連記事

他ドメインから画像の呼び出し(直リンク)を禁止する方法

他ドメインからの画像の呼び出し、いわゆる直リンクの禁止を行いたかった。調べるとh ...

フォルダにリンク制限をかける

imgというフォルダがあり、直接URLを叩いても 中身を見られないけど、同一サー ...

htaccessファイルにてVPS⇔レンタルサーバ間のリバースプロキシ設定を行う方法

VPSの指定したディレクトリにアクセスした場合、レンタルサーバの指定したディレク ...

CPIのレンタルサーバでRewriteEngineを使用する場合の注意点

CPIのレンタルサーバで開発する案件があり、htaccessファイルを用いてRe ...

ブラウザがWebP対応の場合はそのまま表示し、非対応の場合はjpg/png画像を表示させる方法

ページ表示時にブラウザがWebP画像に対応している場合はそのまま表示し、非対応の ...