0

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

例えば

Web サイトの *.pdf ファイルを request.php?file=name_of_pdf_being_redirected にリダイレクトしたい

request.php は、先に進む前にいくつかの詳細を尋ねるフォームのあるページです。

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

何か案は?

編集:申し訳ありませんが、サーバーでApacheを使用しています。

OK I'M GETTING THERE: 次を使用して動作しています:

RewriteRule の RewriteEngine ^pdf/(.+.pdf)$ request.php?file=/$1 [R]

しかし今、ダウンロードページに移動して実際にファイルをダウンロードさせたい場合、新しいルールはダウンロードリンクをフォームに吐き戻します:-Pはははははははははははははははははフォームが送信され、download.php を使用していますか?

4

5 に答える 5

1

アイデア?使用している Web/アプリ サーバーを教えていただくことから始めることができます。

Apache では、RewriteRule を使用してリクエストを別の形式に変換できるはずです。たとえば、次のように/pub/docs/x.pdf変換request.php?file=/pub/docs/x.pdfできます。

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

これは記憶からのものであることを覚えておいてください (Apache に触れてから 6 年経ちますが、まだきれいです :-)、形式は少し異なる場合があります。

アップデート:

これで、次の問題に対するいくつかのオプションが表示されます。

1/ PDF の名前を変更して拡張子を変更し、書き換えルールに引っかからないようにします。クライアントが選択したビューアーで開くように、同じ MIME タイプをクライアントにプッシュするように構成する必要があります。

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

その2番目のオプションは、次の理由から私の選択です。

  • xx.pdf の代わりに xx.pdfx を要求するだけで PDF にアクセスできると人々が理解するのを防ぎます。
  • PDF をすばやく取得できます (リンクを再度クリックする必要はありません)。
于 2009-04-20T03:22:13.367 に答える
0
if($user==authenticated){
 //set pdf headers
 echo file_get_contents('actual.pdf');

modは書き直さず、実際のソースを非表示にし、私が通常行うことです-これが役立つことを願っています

于 2009-04-20T05:05:46.317 に答える
0

これを試すことができます:

  • 誰もブラウザからアクセスできないように、ファイルを Web ルートの「外部」のフォルダに移動します。
  • セッションを使用して、ユーザーがフォームを完了したかどうかを検出します
  • PHP を利用したファイル ダウンロード スクリプトを使用します。最も単純な形式では、次のようになります。
    if ( isset( $_SESSION[ 'OK_TO_DOWNLOAD' ] ) == false )
    {
        header( "場所: must_fill_this_first.php" );
        終了 ( 0 );
    }

    header( "コンテンツ タイプ: アプリケーション/pdf" );
    // 上記を再確認し、よくわからないのでググってください

    echo file_get_contents( 'some_directory_inaccessible_thru_www/' . $_GET[ 'pdf_name' ] );
    // 理想的には、上記でバイナリセーフ関数を使用する必要があります

これは、私が Web サイトで使用した実証済みの手法です。コード例はドラフト アウトラインであり、改良が必要です。

于 2009-04-20T04:45:18.347 に答える
0

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

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

ファイルサイズなど、改善するために追加できるものは他にもありますが、最小限のケースでは、これでうまくいきます。C# でコードが必要な場合は、約 3 分で何かを思いつくことができますが、PHP ではかなり迷っています。HTTPModules と、それらを PHP で記述する方法を探すことから始めます。

「PHP HTTPModule」をグーグルで検索すると、次のようになります。PHPのASP.NET HttpModulesと同等なので、少し間違っているかもしれませんが、それが出発点になることを願っています.

于 2009-04-20T03:23:03.753 に答える
0

Apache Web サーバーを使用している場合は、.htaccess ファイルを使用します。mod_rewrite が有効になっていることを確認する必要がありますが、一度有効にすると、次の 2 つの単純な行を使用してすべてのファイルを書き換えることができます。

RewriteRule の RewriteEngine ^.pdf$ /rewrite.php [NC,L]

IIS を使用している場合は、ISAPI_Rewrite を使用して同様のことを行うことができます。

もう 1 つの方法は、一般にアクセスできないディレクトリ内に PDF を配置することです。そうすれば、PDF リソースに対して行われた要求はアクセス拒否エラーを返し、適切なダウンロード スクリプトを介してのみファイルにアクセスできます。

于 2009-04-20T03:23:23.177 に答える