L’aide de mod_rewrite pour changer la disposition du contenu en fonction de l’URI

J’ai un répertoire de fichiers mp3 que je veux pouvoir les servir en ligne ou donner à l’utilisateur une option de téléchargement en fonction de l’URI de la demande.

/media/file1.mp3 – Dans ce cas, je veux juste servir le fichier et laisser le navigateur y jouer.

/media/download/file1.mp3 – dans ce cas, je veux que l’utilisateur puisse télécharger le fichier à la place.

J’ai été capable d’accomplir ceci avec mod_rewrite et php (en utilisant la fonction header () et readfile ()) mais je préfère tout faire avec mod_rewrite, mod_header etc si possible.

Avec mod_rewrite, vous ne pouvez modifier que certains champs d’en-tête spécifiques, auxquels le champ d’en tête Content-Disposition n’appartient pas. Vous ne pouvez modifier que le champ d’en tête Content-Type :

RewriteRule ^media/[^/]+\.mp3$ - [L,T=audio/mpeg] RewriteRule ^media/download/[^/]+$ - [L,T=application/octet-stream] 

Et si vous voulez utiliser une solution mod_headers + mod_setenvif :

 SetEnvIf Request_URI ^/media/download/ force-download  Header set Content-Disposition attachment Header set Content-Type application/octet-stream  

IfDefine vérifiera les variables définies au démarrage d’Apache pour que cela ne fonctionne pas. Une configuration valide serait:

 SetEnvIf Request_URI ^/media/download/ force-download Header set Content-Disposition attachment env=force-download 

La modification du type de contenu n’est pas nécessaire pour forcer un téléchargement.