12

1つのフォルダのすべてのファイルを強制的にダウンロードしようとしています。

ページ上のリンクは次のようになります

<a href="http://example.com/uploads/documents/file.pdf">Click to download</a>

そして、私は私の.htaccessにこのスニペットを持っています

<filesMatch ".*uploads/documents.*">
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</filesMatch>

次のコードを使用してダウンロードを強制するフォルダー内に.htaccessを直接配置すると機能するため、タグ内の2行が機能することはすでに知っています。

<Files *.*>
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</Files>

filesMatchタグについて理解できないことがあるようです。

4

3 に答える 3

27

詳細を検索すると、次のコードが見つかりました。

<FilesMatch "\.(mov|mp3|jpg|pdf|mp4|avi|wmv)$">
   ForceType application/octet-stream
   Header set Content-Disposition attachment
</FilesMatch>

私のために働いた。

于 2013-07-30T13:59:13.643 に答える
23

FilesMatchFilesのドキュメントをそれぞれ参照してください。それは明確に述べています

このセクションで指定されたディレクティブは、指定されたファイル名と一致するベース名(ファイル名の最後のコンポーネント)を持つすべてのオブジェクトに適用されます。

つまり、あなたの例では、と一致しfile.pdfます。2番目の例は*.*一致file.pdfしますが、最初の例は一致.*uploads/documents.*しません。ディレクトリ区切り文字として使用されるスラッシュが含まれているため、実際には一致することはありません。

apache構成を編集できる場合

<Files *.*>または<Files *.pdf>(ダウンロードを強制する内容に応じて)のいずれかをLocationディレクティブで囲む必要があります。

<Location "/uploads/documents/">
    <Files *.*>
        ForceType application/octet-stream
        Header set Content-Disposition attachment
    </Files>
</Location>

apache構成を編集できない場合

残念ながら、Locationディレクティブは.htaccessファイル内では許可されていません。/uploads/documents/ディレクトリ内に.htaccessを作成するだけです。

于 2013-01-17T22:17:57.943 に答える
2

- このコードは、ファイル名に使用しない場合に最適です 。

たとえば、name-1.mp3の場合は、name1.mp3に変更します。

<FilesMatch "\.(mp3|avi)$" >
    ForceType application/octet-stream
    Header add Content-Disposition "attachment"
</FilesMatch>

ブラウザをクリアして確認してください。

于 2016-06-12T18:47:37.957 に答える