Добавление заголовка типа содержимого HTTP из файла не работает должным образом

У меня есть сервер на 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?

0
задан 1 December 2017 в 13:21
2 ответа

Похоже, вы разместили директиву Rewrite в файле apache httpd.conf вашего сайта. Этот файл анализируется только один раз при загрузке / перезагрузке службы.

Если вы поместите директиву Rewrite в .htaccess сайта, она будет срабатывать каждый раз, когда что-то будет вызвано, и, таким образом, будет отражать последний тип MIME из вашего скрипта. Для этого обязательно:

  1. Убедитесь, что apache httpd.conf или эквивалентный файл разрешает переопределения htaccess.
  2. Подтвердите, хотите ли вы изменить заголовки в начале или в конце запроса. См. http://httpd.apache.org/docs/current/mod/mod_headers.html
  3. Добавьте блок Rewrite в файл .htaccess в корневом каталоге вашего веб-сервера.
  4. Запустите файл htaccess через checker, чтобы убедиться, что он действителен. (вы можете использовать такой инструмент, как http://www.htaccesscheck.com/ )
  5. Запустите обновленный файл httpd.conf или аналогичный файл через средство проверки конфигурации apache (например, команду, указанную в ] Команда для проверки правильности конфигурационных файлов сервера Apache )

После применения обновленийне забудьте перезапустить Apache (надеюсь, в последний раз)!

0
ответ дан 5 December 2019 в 07:07

Наконец-то я нашел решение: проблема заключалась не в самом файле конфигурации, а в отсутствующем RewriteCond .

Без него блок перезаписи некорректно выполнялся для загрузки файлов тоже, что привело к странным неправильным вводам stdin для сценария python.

Таким образом, добавление RewriteCond в файл конфигурации сервера и обработка неправильного ввода в сценарии python исправили эту проблему. для меня, даже без использования файла .htaccess.

0
ответ дан 5 December 2019 в 07:07

Теги

Похожие вопросы