У меня есть сервер на Apache 2.4. Клиенты могут загружать файлы, которые хранятся только в сжатом виде. Для каждого файла также создается текстовый файл, содержащий mimetype файла.
Когда клиент загружает файл, я хочу, чтобы сервер считал mimetype из этого текстового файла и соответственно установил заголовок HTTP Content-Type.
Что У меня до сих пор: I made a python script, which gets the correct mimetype and writes it in stdout and added these directives to the relevant apache config file
RewriteEngine On
RewriteMap mimetype prg:/home/user/scripts/mimetype.py
RewriteRule ^(.*)$ - [ENV=CONTENTTYPE:${mimetype:%{REQUEST_FILENAME}}]
Header append Content-Type "%{CONTENTTYPE}e" env=CONTENTTYPE
so the script gets called.
The problem: It only works after 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
, в корневой каталог документов сайта. Но это вообще не работает. Заголовок Content-Type теперь все время пуст.
Переопределения htaccess разрешены, и http://www.htaccesscheck.com/ сообщает, что синтаксис в порядке, как и apachectl configtest
].
Есть ли способ заставить его работать с помощью файла. htaccess?
Похоже, вы разместили директиву Rewrite в файле apache httpd.conf вашего сайта. Этот файл анализируется только один раз при загрузке / перезагрузке службы.
Если вы поместите директиву Rewrite в .htaccess сайта, она будет срабатывать каждый раз, когда что-то будет вызвано, и, таким образом, будет отражать последний тип MIME из вашего скрипта. Для этого обязательно:
После применения обновленийне забудьте перезапустить Apache (надеюсь, в последний раз)!
Наконец-то я нашел решение: проблема заключалась не в самом файле конфигурации, а в отсутствующем RewriteCond
.
Без него блок перезаписи некорректно выполнялся для загрузки файлов тоже, что привело к странным неправильным вводам stdin
для сценария python.
Таким образом, добавление RewriteCond
в файл конфигурации сервера и обработка неправильного ввода в сценарии python исправили эту проблему. для меня, даже без использования файла .htaccess.