- PR -

Apacheで、PDFファイルへのアクセスをフォーム認証へリダイレクトさせたい

1
投稿者投稿内容
うま
会議室デビュー日: 2004/10/26
投稿数: 4
投稿日時: 2008-10-11 12:46
こんにちは。
Google検索していましたが、なかなか問題解決に至る情報が得られませんでしたので
こちらでみなさんのご助力を賜りたいと思い、書き込みをさせていただきます。

現在、Fedora8、Apache2.2.6、PHP5を使い、簡易なCMSを開発しております。
このCMSでは、Form認証を採用しており、認証情報はSessionに保持しています。

ユーザからWebサーバ上にあるPDF、Excel、Wordファイルへのリクエストが直接あった場合、
未認証のユーザならば、認証ページへリダイレクトさせ、
認証済みのユーザならば、そのままPDFなどのファイルをダウンロードさせる
ということをしたいと考えています。

例えば、ユーザから、http://sample.com/docs/test.pdf へのリクエストがあった場合、
下記のように、認証ページである http://sample.com/login.php へリダイレクトさせることを考えます。

  例) http://sample.com/docs/test.pdf のとき
      → http://sample.com/login.php?redirect=%2Fdocs%2Ftest.pdf

認証後に、http://sample.com/docs/test.pdf へ再びリダイレクトするために、
login.php の引数には、/docs/test.pdf をURLエンコードしたものを渡しています。

http.confで、RedirectMatchディレクティブを使うなど考えましたが
スマートなやり方が思いつきませんでした。

このようなことを行うために、どのようにApacheの設定を行えばよいでしょうかご教授ください。


[ メッセージ編集済み 編集者: うま 編集日時 2008-10-11 12:49 ]
うま
会議室デビュー日: 2004/10/26
投稿数: 4
投稿日時: 2008-10-12 02:03
いろいろ調べてみました。
以下、私なりの答えを説明いたします。
私は、Apacheのmod_rewriteモジュールを利用してみました。

.htaccessファイルを次のように記述しました。

この設定では、PDFやExcelファイルなどにリクエストがきたら、
強制的に check.php へのリクエストに書き換えて処理するようにしています。

check.phpでは、未認証ならば、認証ページへリダイレクトさせ、
認証済みならば、そのままリクエストされたURLのファイルをレスポンスとして返しています。

[.htaccessの内容]
-----------------------------------------------------------------
RewriteEngine on
RewriteRule ^.*\.(pdf|doc|xls|ppt)$ /check.php [L]
-----------------------------------------------------------------


[check.phpの内容]
-----------------------------------------------------------------
session_start();

if(未認証ならば)
{
$redirect=$_SERVER["REQUEST_URI"];
$redirect = urlencode($redirect);
header("Location: $SYSTEM_URL/login.php?redirect=$redirect");
}
else
{
$file_path = $_SERVER["DOCUMENT_ROOT"] . $_SERVER["REQUEST_URI"];
$file_size = filesize($file_path);

$content_type = 何らかの処理でContent-Typeの文字列を取得させる

header("Content-type: $content_type;");
header("Content-Length: $file_size");
readfile($file_path);
}
-----------------------------------------------------------------

他にスマートな方法がありましたら、ご指摘いただけると助かります。


[ メッセージ編集済み 編集者: うま 編集日時 2008-10-12 02:05 ]
たお
ベテラン
会議室デビュー日: 2006/10/27
投稿数: 90
投稿日時: 2008-10-14 00:19
>このCMSでは、Form認証を採用しており
前提から反れちゃいますが、
BASIC認証が一番簡単そうかも。
たお
ベテラン
会議室デビュー日: 2006/10/27
投稿数: 90
投稿日時: 2008-10-14 08:40
start_sessionとあるので、恐らくクッキーを使用しているので
mod_auth_cookie等が使えるかもしれません。
1

スキルアップ/キャリアアップ(JOB@IT)