Apache2: Use o nome de destino do symlink para o mapeamento Content-Type

1

Estou trabalhando em um aplicativo da Web que precisa veicular vários documentos atualizados continuamente em URLs estáticos, mas o tipo de conteúdo dos documentos é diferente (é JPEG ou SVG). Se o documento for um link simbólico, o arquivo no final do link tem a extensão de arquivo correta para o mapeamento de tipo MIME, mas não consegui dizer se é possível fazer com que o Apache siga o link antes de procurar a extensão na tabela MIME.

Esta questão pede a mesma coisa, mas a solução fornecida não funciona para mim, pois os navegadores não detectam automaticamente o SVG se Eu sirvo image / jpeg (eles fazem autodetect GIF e PNG), então eu preciso de um tipo MIME adequado.

Normalmente, eu usaria arquivos .meta e mod_cern_meta para isso, mas meu alvo é o Linux distribuições (Fedora 19/20, RHEL 7) não vem com isso, e eu gostaria de evitar ter que fornecê-lo sozinho. Eu não acho que eu possa usar mod_headers, pois isso exigiria que eu reescrevesse todo o arquivo .htaccess (os arquivos são alterados individualmente), nem mod_asis, já que os próprios arquivos de dados são gerados usando uma ferramenta de terceiros.

Editar : Estou trabalhando em torno disso escrevendo meus arquivos como mapas de tipo (com apenas uma entrada), apontando para o recurso real e listando seu Tipo de Conteúdo. Significa ter que escrever arquivos extras, mas também usando mod_meta. Funciona bem o suficiente por enquanto.

    
por nafmo 15.01.2014 / 12:44

2 respostas

0

Como os URLs estáticos não apontam diretamente para os documentos, mas para um script simples que define o cabeçalho Content-Type correto e transmite o documento?

<?php
    $filename = "path/to/your/file";

    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mimetype = finfo_file($finfo, $filename); 
    finfo_close($finfo);

    header("Content-Type: ".$mimetype );
    echo readfile($filename);
?>
    
por 15.01.2014 / 14:30
0

você tentou mod_mime_magic ? com este módulo ativado, o apache pode adivinhar o tipo de conteúdo da mesma forma que o comando "file" e definirá o cabeçalho do tipo de conteúdo corretamente.

Verificando a configuração padrão para uma instalação do centos httpd, o mod_mime_magic parece estar habilitado por padrão e o tipo de conteúdo é definido corretamente quando (por exemplo) a requisição direciona um symlink ("aaaa") para um, digamos, arquivo .png.

Além disso, verifique se você tem a opção followsymlinks ativada para o diretório raiz que contém o links simbólicos (ou apenas habilitá-lo para o documentroot inteiro)

lrwxrwxrwx  1 root   root       10 Jan 15 16:27 aaa -> pgid35.png
-rw-r--r--  1 root   root   229727 Jan 15 16:26 pgid35.png


HEAD http://localhost/tt/aaa
200 OK
Connection: close
Date: Wed, 15 Jan 2014 13:27:30 GMT
[...]
Content-Length: 229727
Content-Type: image/png                      <<<--- [[bullseye]]
Last-Modified: Wed, 15 Jan 2014 13:26:47 GMT
[...]

Vou incluir, por brevidade, algumas dicas de configuração do apache httpd para fazer o trabalho mágico de mímica:

#assuming the module folder is linked within apache root config dir as 'modules'
LoadModule mime_magic_module modules/mod_mime_magic.so
#define the magic file containing patterns for identifying file types
MIMEMagicFile conf/magic
#the system magic file normally contains more patterns than 
#the default http magic file
#centos magic file install path:
#MIMEMagicFile /usr/share/misc/magic
#do follow the symlinks if you are using them
<Directory />
Options FollowSymlinks
</Directory>
    
por 15.01.2014 / 14:24