画像やPDF等のファイルへの直接アクセスは禁止し、PHP経由のみ表示やダウンロードを可能にする
2024/01/12
ファイルアップローダーを作成する案件があり、アップロードしたファイルは「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部分は対応したことが無かったので勉強になった。
参考サイト
関連記事
-
-
他ドメインから画像の呼び出し(直リンク)を禁止する方法
他ドメインからの画像の呼び出し、いわゆる直リンクの禁止を行いたかった。調べるとh ...
-
-
アクセスしてきたURLをRewriteRuleで書き換えたい
「http://aaa.com/a」というURLを叩いた際に「http://aa ...
-
-
firebugで「CORS を有効にすると解決できます」と表示される際の対応方法
Aサーバーにjsとかcssとか画像とかを置いて、Bサーバーで呼び出す際にちゃんと ...
-
-
.htaccessでURLの末尾のphpという拡張子が無い場合でもページを表示させる方法
「/hoge/test.php」のようなディレクトリ・ファイル名の場合は「htt ...
-
-
htaccessファイルでダイジェスト認証を行う方法
何かで調べ物をしていたときにdigest認証というものを見かけた。basic認証 ...