1

ORM/Auth モジュールを有効にして Kohana 3.1 を使用しています。ディレクトリ A_only で、ロール A を持つユーザーにのみ静的ファイル (ドキュメント、PDF など) を提供したいと考えています。

.htaccess ファイルは、直接見つけた URL を提供するだけで、index.php には渡さないため、.htaccess を介して A_only ですべてのアクセスを拒否できますが、コントローラー関数で静的ファイルを提供するにはどうすればよいでしょうか?

認証が必要な A_only ディレクトリに .htaccess を含めることもできます。ただし、データベースでユーザー/パスワードを検索するように設定した場合でも、再度ログインする必要があります。

4

1 に答える 1

3

静的ファイルの処理を停止するようにWebサーバーに指示する必要があります。最も簡単な解決策は、静的ファイルをWebディレクトリの外に移動して、Apacheがそれらを見つけられないようにすることです。これにより、そのリクエストはコハナを通過するように強制されます。

2番目の部分は、アクセス許可とファイル送信を処理するコントローラーを作成することです。コハナのユーザーガイドには、うまくいくためのかなり良い例があります。

Controller_Userguideの247行目

// Get the file path from the request
$file = $this->request->param('file');

// Find the file extension
$ext = pathinfo($file, PATHINFO_EXTENSION);

// Remove the extension from the filename
$file = substr($file, 0, -(strlen($ext) + 1));

if ($file = Kohana::find_file('media/guide', $file, $ext))
{
    // Check if the browser sent an "if-none-match: <etag>" header, and tell if the file hasn't changed
    $this->response->check_cache(sha1($this->request->uri()).filemtime($file), $this->request);

    // Send the file content as the response
    $this->response->body(file_get_contents($file));

    // Set the proper headers to allow caching
    $this->response->headers('content-type',  File::mime_by_ext($ext));
    $this->response->headers('last-modified', date('r', filemtime($file)));
}
else
{
    // Return a 404 status
    $this->response->status(404);
}

心配する必要がある主なことは、コハナがファイルを探す場所を変更することです。

if ($file = Kohana::find_file('media/guide', $file, $ext))

残りは定型文です。

于 2011-06-08T09:58:11.137 に答える