Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Принудительное изменение MIME-типа в Apache некоторым определенным ссылкам  (Прочитано 4788 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Добрый день уважаемые.
Я использую Apache как сервер для 1С-приложений. И у меня возникла проблема с MIME-типами в этом приложении. Дело в том, что из базы даных 1С можно получать данные по URL-ссылке. Но, проблема в том, что значения передаются с MIME-типом application/octet-stream. А храню я в базе данных HTML-файлы и хочу их так и использовать, но браузеры файлы с типом application/octet-stream предлагают их сохранить (вместо того, чтобы молча открыть).
В стандартной поставке Апача идет два модуля: mod_mime и mod_mime_magic. Первый - соответствие с расширением (не подходит), второй - определение MIME-типа по содержимому. Казалось бы, именно то, что нужно. Но дело в том, что этот модуль так же не работает, видимо из за того, что модуль 1С уже устанавливает MIME-тип (а раз он установлен, то и mod_mime_magic и не пытается).
И собственно вопрос: можно ли как-нибудь побороть эту проблему стандартными средствами? Если нет, то может есть какой-нибудь модуль для этого? И если и этого не дано, то вообще позволяет ли Apache API делать такое (на случай написать свой модуль)?
Спасибо за внимание.
UPD. Это не суть важно, но ссылку на реквизит справочника я получаю через ПолучитьНавигационнуюСсылку и она выглядит примерно так: http://localhost/WebApplication/e1cib/data/Справочник.ВебДокументы.Файлы?ref="12349238461234abf1234fbe134f"И отдается значение по этой ссылке апачевым модулем 1C.
« Последнее редактирование: 11 Октября 2010, 08:15:32 от s.r »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Ты забыл уточнить, чем ты их из базы отдаёшь.

И всегда можно сделать

<FilesMatch ~ \.какойтамтип$>
AddOutputFilter PHP .какойтамтип
php_value auto_prepend_file /.../fixencoding.php
</FilesMatch>

fixencoding.php:
<?php
header
('Content-Type: text/html; charset=...');
« Последнее редактирование: 11 Октября 2010, 08:16:58 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Интересное решение, только вот у меня нет расширения у файлов. И как тогда быть?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Поставить задачу нормально.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Хорошо. Сокращаю до необходимого минимума.
1C'овский модуль (1cws_module) делает доступными ссылки вида:
http://localhost/WebApplication/e1cib/data/Справочник.ВебДокументы.Файлы?ref="12349238461234abf1234fbe134f"Этот же модуль файлам, по этим ссылкам дает MIME-тип: application/octet-stream
В моей задаче нужно, что бы у них был MIME-тип: text/html

Не знаю как это сделать, но средствами 1С, видимо, невозможно.


Пользователь решил продолжить мысль 11 Октября 2010, 16:43:43:
Всё, решилось). Ура-ура-ура. Спасибо за помощь.
Написал так:
LoadModule headers_module modules/mod_headers.so

<LocationMatch "e1cib/data">
  Header unset Content-Type
  Header set Content-Type "text/html"
  Header unset Content-Disposition
</LocationMatch>
« Последнее редактирование: 11 Октября 2010, 16:43:43 от s.r »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Только наверное не
Header set Content-Type "text/html"

а

Header set Content-Type "text/html; charset=кодировкадокументов"
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Была у меня эта проблема и я нашел решение, о котором тут написал. Но теперь мне приходится пересмотреть его.
Идея у меня такова: дописывать к URL'ю "?mimecorrection_text_html", чтобы Apache уже сам менял MIME-тип.
Но, проблема в том, что LocationMatch не разбирает строку после "?". Вроде как, подходит для этих целей mod_rewrite.
Просто в конец файла дописал такое:
RewriteEngine On
RewriteRule ^.*mimecorrection_text_html.*$ - [T=text/html]
Но, это не помогает. Кодировка не меняется всё-равно у файлов... Видимо, я что-то не так сделал.
« Последнее редактирование: 16 Ноября 2010, 17:31:41 от s.r »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Ты мой предыдущий ответ читал вообще?
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Ты мой предыдущий ответ читал вообще?
Если ответ про кодировку, тогда хочу заметить, что в документации к mod_rewrite не видел, что в T надо так же указывать кодировку. Там везде лишь майм-типы указывают.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
И как с людьми после этого разговаривать...
Тебе скриншот форума приаттачить, чтобы стало понятно, какой ответ "предыдущий"?

https://forum.ubuntu.ru/index.php?topic=117430.msg871536#msg871536
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Почитал Ваши ответы в других темах (а то уж подумал, что я так понравился, но увы и ах).
Итак, все-таки не могу я решить проблему: как поменять mime-тип через mod_rewrite для url'ей определенного вида (полный url с текстом после "?"). Или может есть другой модуль для этого?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
<KZLM!!!

Я тебе уже сказал, или ещё нет? mod_rewrite предназначен для переписывания АДРЕСОВ!!! Но никак не содержимого запросов.
Для копания в содержимом используются ДРУГИЕ <KZLM МОДУЛИ!
Ссылку на пост ещё раз дать?

P.S.
Если до тебя простые слова с трудом доходят, опиши свою задачу русским языком.
Если она изменилась с момента написания первого сообщения (ту задачу благополучно решили, на сколько я понимаю)...
Если не изменилась - то что ты нам тут голову морочишь? Что в решении не устраивает?
« Последнее редактирование: 17 Ноября 2010, 11:26:51 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Пожалуй зря я так резко написал. Прошу прощения.

Заново, пытаюсь подробно описать проблему.
На сервере доступны различные URL. В основном они имеют вид:
http://localhost/InfoBase/RU_ru//e1cib/files?url=e1cib/data/Справочник.ВебДокументы.Документ?ref="b61b0800279350f811dff07922b6bcc0"&targetFileName=mimecorrection_text_html&forSaveAsМне надо, чтобы если в URL встречается подстрка "mimecorrection_text_html", то Apache ставил содержимому MIME-тип: text/html.
К сожалению <LocationMatch> не обрабатывает GET-запрос (всё, что идет после знака "?"), а у меня этот "идентификатор MIME-типа" находится именно в GET-запросе.
А почему я пытался это сделать через mod_rewrite, потому что, вроде как, RewriteRule может менять MIME-тип содержимого (флаг type в http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule).

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Тогда это должно быть как-то так.

RewriteCond %{QUERY_STRING} "mimecorrection_text_html"
RewriteRule "^(.+)" "$1" [type=text/html,query-string-append]

(А что не так с оригинальной локацией без GET-подзапроса и mod_mime ?)
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
RewriteCond %{QUERY_STRING} "mimecorrection_text_html"
RewriteRule "^(.+)" "$1" [type=text/html,qsappend]
Ноль реакции.

(А что не так с оригинальной локацией без GET-подзапроса и mod_mime ?)
Дело в том, что 1С сама решает какой лучше mime-тип и это application/octet-stream. Сама она вообще никак не предлагает это менять. Поэтому я и пытаюсь бороться через Apache.

 

Страница сгенерирована за 0.018 секунд. Запросов: 19.