2012-03-18 9 views
3

.htaccessで、Dropboxのように特定のGET変数がある場合にのみ、ファイルを強制的にダウンロードすることができるのだろうかと思います。.htaccessと特定のGETリクエスト(Dropboxスタイル)を使って強制的にダウンロードすることは可能ですか?

例:

http://www.domain.com/file.mp4 

ながら、サーバーだけで、ファイルを提供しています:

http://www.domain.com/file.mp4?dl 

は、ファイルをダウンロードし、ブラウザを強制します。

PS:PHPreadfile()を使用すると、私の場合は実行可能な選択肢にはなりません。ありがとう。 FilesMatchのパターンは、クエリ文字列、適切なファイル名のみに対して一致していません

<FilesMatch "\?dl$"> 
    ForceType application/octet-stream 
    Header set Content-Disposition attachment 
</FilesMatch> 
+0

'\?dl $'を確認して追加ヘッダーを追加できますか? – alex

+0

@alex、例を挙げてください。 – achairapart

答えて

9

+0

素晴らしい提案、ありがとう! – achairapart

+0

HI!これも機能するはずですか? するRewriteCondの%{QUERY_STRING} DL のRewriteRule * \ MP4 - [T =アプリケーション/オクテットストリーム] するRewriteCondの%{QUERY_STRING} DL のRewriteRule * \ JPG - [T =アプリケーション/オクテットストリーム] – PJunior

+0

@PJuniorはい、確かに、なぜそれは動作しませんか?しかし、あなたは正規表現を '。* \。(jpg)|(mp4)'のようなものに組み合わせることで、単一のルールでそれを行うこともできます。また、クエリ文字列をもう少し厳密にテストすることもできます(それは、クエリ文字列に "dl"という部分文字列が含まれているかどうかをチェックするだけです)。 –

-1

はこれを試してみてください。あなたは、しかし、mod_rewriteのモジュールを利用することができ

%{QUERY_STRING}変数とT flag

RewriteCond %{QUERY_STRING} dl 
RewriteRule .*\.mp4 - [T=application/octet-stream] 

また、あなたはApacheが> 2.3(と思う)、あなたがあるIf directive、使用することができている場合たくさんのクリーナー:

<FilesMatch "filepattern.mp4"> 
    <If "%{QUERY_STRING} =~ /dl/"> 
     ForceType application/octet-stream 
     Header set Content-Disposition attachment 
    </If> 
</FilesMatch> 

最初の解決策が更新されました。

3

私のプロジェクトは非常に似ています。質問は実際にはDropBox handles download linksのようなクエリパラメータを使用するという考えを私に与えました。 DropBoxのように、より長い「dl = 1」パラメータを使用して、通常のURLに表示される可能性は低いです。 Apacheの "if directive"を使うのはいいアイデアですが、残念ながら私はApache 2.2になっていますので利用できません。私はapplication/octet-stream Content-Typeを使うことを考えましたが、この考え方が気に入らなかったこの他のStack Overflow threadを見ました。最後に、BlogSpot Articleが、RewriteRuleに環境変数を設定し、同じ変数をヘッダーコマンドで参照することを提案しました。 .htaccessコードは非常にうまく動作し、問題を解決しました。このスレッドとBlogSpotのメンバーのみなさん、素晴らしい提案をいただきありがとうございます。私のコードサンプルが下に表示されます。別の方法として

# Required Modules are: 
# 1) mod_rewrite.c 
# 2) mod_headers.c 
RewriteEngine On 
RewriteCond %{QUERY_STRING} ^dl=1 
RewriteRule .* - [E=DOWNLOAD_FILE:1] 
Header set Content-Disposition "attachment" env=DOWNLOAD_FILE 
2

、あなたは「ダウンロード」/プロンプト「として保存」を開くには、タグと力ブラウザ上でパラメータを追加することができます。より簡単に見えます。

<a href="file.mp3" download >Download File</a> 
+1

ありがとう、 'download'属性について聞いたことがありません。これは素晴らしいフロントエンドのコンパニオンです。 – achairapart