[PHP-users 10742] Re: ディレクトリ以下全てに対しての認証について

Toshiyuki Kajii php-users@php.gr.jp
Fri, 11 Oct 2002 12:14:56 +0900


梶井です。

* Fri, 11 Oct 2002 11:39:56 +0900
* Tybalt of Capulet <ice-man@tomato.ne.jp> wrote:

>しかしjpeg、gif、png、pdf、word、excelファイル等へ認証をかけたいのです。
>上記のようなファイルを一旦PHPで読み込んでからPHPで吐き出すという
>ことも考えたのですがpdfファイル等が巨大なサイズになった場合
>サーバーに負荷がかかりすぎ、またユーザー側にも不要な待ち時間が
>増える等の理由で採用は無理と判断しました。
>どなたかディレクトリ以下全ての不特定の種類のファイルに対して
>認証をかける方法をご存知の方教えていただけませんでしょうか?

サーバーへの負荷や引数によるセキュリティに問題があるかもしれませんが、
こんな方法で一応実現させたことがあります。

まず、Apacheの設定で書き換えルールを次のように設定します。

RewriteEngine on
RewriteRule ^/data/([^/]+)$ /dl.php?$1 [PT]

その上で、

#dl.php
<?php
$path = "/ファイルを置いてあるディレクトリ/";
$fsize = filesize($path . $_SERVER["QUERY_STRING"]);
header("Content-Length: $fsize");
readfile($path . $_SERVER["QUERY_STRING"]);
?>

とします。
こうすると、あたかも/dataにファイルがあるかのように見えますが、
apacheのドキュメントルートとは別の場所に置いてdl.phpによって認証
をかければ、直接叩かれても読めないようにできます。


*---------------------------------------------------*
    Toshiyuki Kajii    梶井 俊幸
    e-mail:            mikoto@camino.nissan.ne.jp
*---------------------------------------------------*