2009-04-20 8 views
0

こんにちは私のサイトの任意のpdfファイルへのすべてのリンクを、ダウンロードしてPDFを表示する前にユーザー情報を収集するフォームのページにリダイレクトしようとしています。ダウンロードする前にシンプルフォームにファイルをリダイレクト

例:

私はrequest.phpするウェブサイトで* .pdfファイルをリダイレクトするようにしたいですか?ファイル= request.phpは前にいくつかの詳細を尋ねることにフォームのページです

をname_of_pdf_being_redirected続行する。

サイト内のすべてのpdfは/ pdfフォルダ内に保持されています。

アイデア?

EDIT:申し訳ありません私はサーバー上でApacheを使用しています。

私はそこに取得していますOK: 私はそれを使用して、今働いてい:。?

RewriteEngineのRewriteRule^PDF /(.+ PDF)$のrequest.php に=/$ 1 [R]

を提出

しかし、ダウンロードページに行くときに、私は実際にファイルをダウンロードさせたいと思っています。私の新しいルールは、ダウンロードリンクをフォームに戻しています.-Pha haha​​それでは、あなたはdownload.phpにいますか?

+0

をするRewriteCondであなたのRewriteRuleを補完するようにしてください役立ちます願っています。 PHPを使ってRewriteCondで使用できる変数を操作することができます。 –

答えて

0

あなたはこれを試すことができます誰も人が完了したかどうかを検出するために、ブラウザを通して

  • 使用セッションにもアクセスできないように

      は、フォルダ「外」Webルートにファイルを移動し
    • フォームまたはなし
    • PHPの動力ファイルのダウンロードスクリプトを使用してください。これは私がウェブサイト上で使用しようとしたテスト手法である
     
        if (isset($_SESSION[ 'OK_TO_DOWNLOAD' ]) == false) 
        { 
         header("Location: must_fill_this_first.php"); 
         exit(0); 
        } 
    
        header("Content-type: application/pdf"); 
        // double check the above, google it as i am not sure 
    
        echo file_get_contents('some_directory_inaccessible_thru_www/' . $_GET[ 'pdf_name' ]); 
        // ideally a binary-safe function needs to be used above 
    

    :そのnaivest形式では、それは次のようになります。コード例は概要の草案であり、洗練が必要です。

  • +0

    これは私のQの2番目の問題を解決していただきありがとうございます。 – dviero

    1

    アイデア?

    Apacheでは、RewriteRuleを使用してリクエストを別のフォームにモーフィングすることができるはずです。例えば、request.php?file=/pub/docs/x.pdf/pub/docs/x.pdfを回しするようなもので行うことができます。

    RewriteRule ^/pdf/(.*)\.pdf/ request.php?file=/$1.pdf 
    

    六年(これはメモリからである点に注意してください、私はApacheとまだきれいな:-)に触れたことから、フォーマットが多少異なる場合があります。

    更新:

    は今、あなたはここにあなたの次の問題のためのオプションのカップルです、ソートされたというんです。

    1 /改名ルールによってキャッチされないように、PDFの名前を変更して別の拡張子を付けます。それらは、同じMIMEタイプをクライアントにプッシュして、ビューアのクライアント選択で開くように構成する必要があります。

    2/PDFの直接アクセスとしてではなく、スクリプトの一部としてダウンロードを行います。フォームの提出はHTTPリクエストであるため、に再度をダウンロードページにリダイレクトするのではなく、PDFコンテンツですぐに回答できるはずです。

      彼らはだけではなく、xx.pdfのxx.pdfxを要求することにより、PDFファイルに取得することができます考え出す人を停止し
    • :目のオプションは、それ以来、私の選択であろうと

    • 人がPDFを入手するのが早くなります(リンクを再度クリックする必要はありません)。
    +0

    試してみましたが、うまくいきませんでした:-( これはリダイレクトですが、request.phpページのすべての画像は、画像へのパスを/画像を/ pdf/imagesに追加する RewriteEngine on RewriteRule^pdf /(。+ \。pdf)$ request.php?file =/$ 1 [L] – dviero

    +0

    元のURLは何ですか? "画像"ビットも書き換えにあります。 – paxdiablo

    +0

    私は今は動作していますが、新しい問題があります。助けてくれてありがとう – dviero

    0

    私の答えは.NETのWebサイトに関するものですが、PHPのどこかに同じ構文が存在することは確かです。

    私は、単にrequest.php?... etc(私の場合はrequest.aspx)へのResponse.Redirectを実行する* .pdfのパスを持つHTTPModuleを持っています。そして、ボタンのクリックのイベントハンドラそのページで、どのpdfが表示されているかを知っていて、それらが承認されていることがわかったら、Response.ContentType = [MIMEタイプのpdf]をクリックし、Response.WriteFile(pdfFile)、そして最後にResponse.End()を実行します。

    ファイルサイズなどを改善するために追加できるものはほかにもありますが、最小限の場合はこれが有効です。 C#でコードを作成したい場合は、約3分で何かを考え出すことができますが、PHPではかなり失われています。私は、HTTPModulesを探し始めるだろうし、PHPでそれらを書く方法。

    「PHP HTTPModule」のグーグルでは、次のようになります。Equivalent of ASP.NET HttpModules in PHP私は少し間違っているかもしれませんが、うまくいけば出発点です。

    0

    Apache Webサーバーを使用している場合は、.htaccessファイルを使用します。あなたはmod_rewriteのが有効になっていることを確認してくださいする必要がありますが、あなたは一度、あなたは、これら二つのシンプルなライン使用して、すべてのファイルを書き換えることができます。 のRewriteRule^.PDF $ /rewrite.php [NC、L]

    RewriteEngineを

    IISを使用している場合は、ISAPI_Rewriteを使用して同様の処理を実行できます。

    あなたの他の選択肢は、公にアクセスできないディレクトリにあなたのpdfを置くことです。その後、pdfリソースに対して行われた要求は、アクセス拒否エラーを返し、適切なダウンロードスクリプトを介してのみアクセスできます。

    +0

    私はこれを試した - どちらもうまくいかなかった。 – dviero

    0
    if($user==authenticated){ 
    //set pdf headers 
    echo file_get_contents('actual.pdf'); 
    

    何のmodの再書き込みをしない、実際のソースを隠し、私は通常、何をすべきかである - これは

    関連する問題