Я работаю над веб-приложением, которое должно обслуживать ряд постоянно обновляемых документов по статическим 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>