0

サーバーからファイルをダウンロードするアプリケーションがあります。それらをダウンロードした後、それを保存する必要があります。そのために、応答ヘッダーからのファイル名パラメーターを使用します。

標準の PHP を使用している場合、download.php?id=downloadID問題なくヘッダーを設定できます。

ここでのタスクは、クライアント サーバーで使用可能な php がないことです。応答ヘッダー内にファイル名を設定する必要があります。

これが私が持っているhtaccessです:

<FilesMatch "\.(?i:pdf)$">
    Header set Content-Type: application/octet-stream
    Header set Content-Disposition: "attachment; filename=FILE_NAME.pdf"
</FilesMatch>

そして、htaccessを使用してファイル名をヘッダーに動的にパースする方法がわかりません。私はそれを探しましたが、まだ解決策はありません。

助言がありますか?

4

1 に答える 1

1

それがうまくいくかどうかはわかりませんが、これが私の最初の試みです。

RewriteRule [^/]+\.pdf$ - [E=FILENAME:$0]
<FilesMatch "\.(?i:pdf)$">
    Header set Content-Type application/octet-stream
    Header set Content-Disposition "attachment; filename=%{FILENAME}e" 
</FilesMatch>

編集一部のapacheインストールは、env変数の前にenv変数を付けているようですREDIRECT_

RewriteRule [^/]+\.pdf$ - [E=FILENAME:$0]
Header set Content-Type application/octet-stream env=REDIRECT_FILENAME
Header set Content-Disposition "attachment; filename=%{REDIRECT_FILENAME}e" env=REDIRECT_FILENAME

上記のコードはそのままでは機能しません。私の場合、別の内部リダイレクトが必要でした。

しかし、リクエストURLにファイル名も含まれている場合、なぜヘッダーにファイル名を設定する必要があるのでしょうか。すべてのブラウザは、URLに名前を付けてファイルを保存します。したがって、に行くと/path/test.pdf、ブラウザがファイル名を提案することになりますtest.pdf

于 2012-02-16T21:31:43.030 に答える