У меня сервер работает на Apache 2.4. Клиенты могут загружать файлы, которые хранятся только в сжатом виде. Для каждого файла также создается текстовый файл, содержащий mimetype файла.
Когда клиент загружает файл, я хочу, чтобы сервер считал mimetype из этого текстового файла и соответственно установил заголовок HTTP Content-Type.
Что у меня есть до сих пор: я создал скрипт python, который получает правильный тип mimetype и записывает его в stdout, и добавил эти директивы в соответствующий файл конфигурации apache.
RewriteEngine On
RewriteMap mimetype prg:/home/user/scripts/mimetype.py
RewriteRule ^(.*)$ - [ENV=CONTENTTYPE:${mimetype:%{REQUEST_FILENAME}}]
Header append Content-Type "%{CONTENTTYPE}e" env=CONTENTTYPE
так вызывается сценарий.
В проблема: Работает только после service apache2 reload
.
Но когда загружается новый файл, заголовок Content-Type для следующих загрузок пуст (даже для файлов, которые работали раньше).
Обновить: После ответа Ансона Ван Хана решение должно использовать файл .htaccess, потому что файл конфигурации анализируется только один раз при загрузке / перезагрузке службы.
К сожалению RewriteMap
не допускается в .htaccess. Я пробовал добавить
RewriteEngine On
RewriteMap mimetype prg:/home/user/scripts/mimetype.py
директивы в файл конфигурации сайтов и поместил файл .htaccess, содержащий
RewriteEngine On
RewriteRule ^(.*)$ - [ENV=CONTENTTYPE:${mimetype:%{REQUEST_FILENAME}}]
Header append Content-Type "%{CONTENTTYPE}e" env=CONTENTTYPE
в сайтах Document Root. Но это вообще не работает. Заголовок Content-Type теперь все время пуст.
htaccess разрешены и http://www.htaccesscheck.com/ говорит, что синтаксис в порядке, как и apachectl configtest
.
Есть ли способ заставить его работать с помощью файла .htaccess?
Наконец-то я нашел решение: проблема заключалась не в самом файле конфигурации, а в отсутствующем RewriteCond
.
Без него блок перезаписи также неправильно выполнялся для загрузки файлов, что приводило к странной ошибке stdin
входы для скрипта Python.
Итак, добавив RewriteCond
в файл конфигурации сервера и обработка неправильного ввода в скрипте python адекватно решила эту проблему для меня, даже без использования файла .htaccess.
Похоже, вы разместили свою директиву Rewrite в файле apache httpd.conf вашего сайта. Этот файл анализируется только один раз при загрузке / перезагрузке службы.
Если вы поместите директиву Rewrite в .htaccess сайта, она будет попадать каждый раз, когда что-то будет вызвано, и, таким образом, будет отражать последний тип mime из вашего скрипта. Для этого обязательно:
После применения обновлений не забудьте перезапустить Apache (надеюсь, в последний раз)!