画像や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部分は対応したことが無かったので勉強になった。
参考サイト
関連記事
-
-
htaccessとhttpd.confの優先度
既に完成しているシステムを引き継ぐことがあり、そこのリライトルール設定を変更した ...
-
-
フォルダにリンク制限をかける
imgというフォルダがあり、直接URLを叩いても 中身を見られないけど、同一サー ...
-
-
HSTS(HTTP Strict Transport Security)の設定方法
あるサイトのセキュリティ対策としてHSTS(HTTP Strict Transp ...
-
-
CPIのレンタルサーバでRewriteEngineを使用する場合の注意点
CPIのレンタルサーバで開発する案件があり、htaccessファイルを用いてRe ...
-
-
apacheで指定した期間(日時)のアクセスログを抽出する方法
apacheのaccess_logとerror_logで特定日時内のログのみを確 ...