Il est possible de forcer le téléchargement avec .htaccess et une requête GET spécifique (style Dropbox)?

Je me demande s’il est possible avec .htaccess de forcer le téléchargement des fichiers uniquement s’il existe une variable GET spécifique, comme le fait Dropbox.

Exemple:

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

le serveur ne sert que le fichier, alors que:

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

forcer le navigateur à télécharger le fichier.

PS: Utiliser PHP avec readfile() n’est pas une option viable dans mon cas. Merci.

Le modèle de FilesMatch ne correspond pas à la chaîne de requête, uniquement le nom de fichier approprié.

Vous pouvez cependant utiliser le module mod_rewrite, la variable %{QUERY_STRING} et le flag T :

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

Alternativement, si vous avez Apache> 2.3 (je pense), vous pouvez utiliser la directive If , qui est beaucoup plus propre:

   ForceType application/octet-stream Header set Content-Disposition attachment   

La première solution a été mise à jour.

J’ai une exigence très similaire sur mon projet. La question m’a en fait donné l’idée d’utiliser un paramètre de requête similaire à celui utilisé par DropBox pour gérer les liens de téléchargement . Je vais utiliser un paramètre plus long “dl = 1” comme DropBox, donc il est peu probable qu’il apparaisse dans une URL normale. Utiliser Apache “if directive” est une bonne idée, mais malheureusement je suis sur Apache 2.2, donc ce n’est pas disponible. J’ai envisagé d’utiliser le type de contenu application / octet-stream mais j’ai ensuite vu cet autre thread de dépassement de stack qui n’aimait pas cette idée. Donc, finalement, j’ai vu un article BlogSpot qui proposait de définir une variable d’environnement dans une RewriteRule et de référencer cette même variable dans une commande d’en-tête. Le code .htaccess fonctionne très bien et a résolu le problème. Merci à tous sur ce sujet et au gars de BlogSpot pour les bonnes suggestions. Mon exemple de code est répertorié ci-dessous:

 # 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 

Vous pouvez également append un paramètre sur la balise et forcer le navigateur à ouvrir une invite “download” / “save as”. Semble plus facile

 Download File 

Essaye ça:

  ForceType application/octet-stream Header set Content-Disposition attachment