2011-05-29 1 views
9

J'ai une règle de réécriture dans .htaccessForce de type mime vidéo/WebM en utilisant .htaccess selon la demande uri

RewriteRule (.+?\.fid)/ /$1 [L] 

avec une requête URI comme: /123.fid/myfile.webm

Comment puis-je forcer le type mime à : video/webm en utilisant .htaccess y compris la règle ci-dessus?

Ce que j'ai essayé déjà, d'ajouter le TOP du fichier .htaccess sans succès:

AddType video/webm .webm 

et

<FilesMatch "\.webm$"> 
    ForceType video/webm 
</FilesMatch> 

J'utilise le module apaches mime_magic pour rechercher le type mime de .fid fichiers, mais cela ne s'applique pas aux fichiers webm. Je suppose que c'est le RewriteRule qui cause des problèmes avec le type de fichier, et j'ai besoin de chercher webm dans la demande d'uri en quelque sorte.

Si je le fais: AddType video/webm .fid le type mime correct est envoyé - mais cela casse tout autre format de fichier stocké dans .fid. L'utilisation de .fid est une exigence de conception et ne peut pas changer.

* Edit:

J'ai aussi essayé:

RewriteCond %{REQUEST_URI} \.webm$ 
RewriteRule .* - [T=video/webm] 

et

RewriteRule \.webm$ - [T=video/webm] 

avec le même résultat. Le type mime servi est text/plain. Est-ce que cela pourrait être interférer avec le module mime_magic? J'ai également essayé d'ajouter: DefaultType video/webm qui fonctionne. Ceci est la chose la plus proche à une solution actuellement, en tant que module mime_magic semble trouver les types MIME correct pour envoyer, mais je ne trouve pas que ce soit une solution particulièrement élégante

* Edit2: AddType video/webm .fid travaille - comment puis-je conditionnellement faire AddType basé sur la demande uri?

+0

servez-vous des fichiers réels ou virtuels URL? – vbence

+0

Les fichiers .fid sont de vrais fichiers, alors que je réécris l'url pour inclure myfile.webm –

Répondre

1

Impossible d'obtenir que cela fonctionne dans Apache, je lui ai donné et déplacé à nginx à la place. Je l'ai à travailler en utilisant nginx:

location ~\.webm$ { 
    add_header Content-Type video/webm; 
    rewrite (.+?\.fid)/ /$1 break; 
} 
6

Vous pouvez utiliser le T-drapeau dans un RewriteRule:

RewriteRule someRegEx$ - [T=video/webm] 

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_t

+2

Merci, j'ai donné un coup de feu. Cependant, il semble que quelque chose supplante quelque part cette directive .htaccess? À moins que ma syntaxe ne soit désactivée. –

+0

Mod_rewrite est-il réellement activé? – Floern

+0

Oui, le fichier est servi, mais avec un type mime incorrect –

3

Si vous envoyez les données avec un script (fichiers non réel), le script doit envoyer les en-têtes corrects, par exemple avec PHP (avant toute autre sortie):

header("Content-type: video/webm"); 

en cas de fichiers réels que vous pouvez utiliser la négociation de contenu (au lieu de rewrite) et:

AddType video/webm .fid 

Edit:

Malheureusement, je ne suis pas près apache, mais cela pourrait la peine d'essayer:

RewriteCond %{REQUEST_URI} \.webm$ 
RewriteRule (.*) $1 [E=is_webm:true] 

Header set Content-Type video/webm env=is_webm 
+0

Je n'envoie pas de fichiers via un script. Les fichiers sont des fichiers réels avec le fichier se terminant par .fid (et contient une variété de types de données) –

+0

J'ai édité la réponse en fonction de votre commentaire. – vbence

+0

Si vous aviez lu mon message un peu plus attentivement, vous auriez dû remarquer: "Si je le fais: AddType video/webm .fid le bon type mime est envoyé - mais cela casse tout autre format de fichier stocké dans .fid. une exigence de conception et ne peut pas changer. " –

6

Il a travaillé pour moi, quand j'ai ajouté les lignes suivantes à mon dossier .htaccess:

<IfModule mod_rewrite.c> 
    AddType video/ogg .ogv 
    AddType video/webm .webm 
    AddType video/mp4 .mp4 
</IfModule> 
+0

Cela ne fonctionne pas, car le fichier physique est un fichier .fid, pas .webm - le .webm est seulement ajouté par réécriture –

+0

merci cela a fonctionné pour moi! Bien qu'il ne répond pas à cette question. – woony