Назад | Перейти на главную страницу

Apache2: использовать целевое имя символической ссылки для сопоставления Content-Type

Я работаю над веб-приложением, которое должно обслуживать ряд постоянно обновляемых документов по статическим URL-адресам, но Content-Type документов отличается (это либо JPEG, либо SVG). Если документ является символической ссылкой, файл в конце ссылки имеет правильное расширение файла для сопоставления типов MIME, но я не смог определить, можно ли заставить Apache перейти по ссылке, прежде чем искать расширение. в таблице MIME.

Этот вопрос спрашивает то же самое, но предоставленный обходной путь не работает для меня, поскольку браузеры не определяют автоматически SVG, если я использую изображение / jpeg (они автоматически определяют GIF и PNG), поэтому мне нужен правильный тип MIME.

Обычно я бы использовал файлы .meta и mod_cern_meta для этого, но мои целевые дистрибутивы Linux (Fedora 19/20, RHEL 7) не поставляются с этим, и я бы не хотел поставлять его сам. Я не думаю, что могу использовать mod_headers, поскольку для этого мне потребуется переписать весь файл .htaccess (файлы меняются индивидуально), ни mod_asis, поскольку сами файлы данных создаются с помощью стороннего инструмента.

редактировать: Я работаю над этим, записывая свои файлы как карты типов (только с одной записью), указывая на фактический ресурс и перечисляя его Content-Type. Это означает необходимость записи дополнительных файлов, но также и использование mod_meta. Пока работает достаточно хорошо.

Как насчет того, чтобы ваши статические URL-адреса указывали не непосредственно на документы, а на простой скрипт, который устанавливает правильный заголовок Content-Type, а затем передает документ в потоковом режиме?

<?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);
?>

ты пробовала mod_mime_magic? с включенным этим модулем apache может угадать тип контента так же, как команда "file", и правильно установит заголовок типа контента.

Проверяя конфигурацию по умолчанию для установки centos httpd, кажется, что mod_mime_magic включен по умолчанию, а тип содержимого установлен правильно, когда (например) запрос нацелен на символическую ссылку (а именно "aaaa") для, скажем, файла .png .

Также убедитесь, что у вас есть подписаться опция включена для корневого каталога, содержащего символические ссылки (или просто включите его для всего корневого каталога документа)

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
[...]

Я собираюсь включить для краткости некоторые подсказки по настройке apache httpd, чтобы заставить работать mime magic:

#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>