Php include () собственно Mime-типы - PullRequest
0 голосов
/ 20 мая 2011

TLDR: я ищу способ обслуживания веб-ресурсов (css, jpg и т. Д.) Из файловой системы , которая сохраняет тип mime.

Я создаю оболочку phpкоторый проверяет пользователя из другого домена (с помощью одноразового токена), создает сеанс и затем обслуживает файлы, несколько веб-сайтов в отдельных каталогах, в другом доступном каталоге для этого пользователя.

У меня есть, так чтодалеко, использовал php для обработки проверки и mod_rewrite для перенаправления всех запросов на что-либо внутри каталога через оболочку, добавляющую запрошенную страницу как get.

Проблема в том, что когда я открываю веб-страницу, которая ссылается на другие ресурсыон проходит через оболочку для каждого ресурса и не сохраняет MIME-тип.В результате форматирование облажается.

У кого-нибудь есть обходной путь или лучший способ обслужить файлы из файловой системы через скрипт php.

Вот мойПравила перенаправления:

<Directory /var/www/ssl/auth>
    RewriteEngine On
    RewriteBase /auth
    RewriteRule ^(.*) /wrapper.php?topage=https://%{SERVER_NAME}/auth/$1
</Directory>

И это включает в себя: (после проверки, что файл существует)

$path = 'https://'.$_SERVER['SERVER_NAME'].'/';
$abs_path=substr($_GET['topage'], strlen($path));
include ($abs_path);

Вот ошибки, которые я получаю (используя инструменты dev наchrome)

Resource interpreted as Stylesheet but transfered with MIME type text/html

Я создаю это, чтобы пользователи Apple в моей школе могли публиковать классные веб-сайты (используя iweb и размещенные внутри), которые требуют аутентификации и могут быть доступны без входа в систему дважды при наличии ссылки с главного веб-сайта школы(размещен снаружи).

Костюмы непреклонны в том, что они хотят, чтобы он настраивался на домены.Если у вас есть какие-либо предложения по этой конкретной проблеме или как добиться авторизации.через домены, дайте мне знать.

Решение

Tandu.Спасибо за помощь в использовании изложенных вами концепций, я смог использовать переполнение стека для решения моей проблемы, вот решение.Я <и нашел, как получить тип MIME, а затем передал его, используя <code>header(), работает как заклинание.

$path = $proto.$_SERVER['SERVER_NAME'].'/';
$abs_path=substr($_GET['topage'], strlen($path));
$type = (get_object_vars(apache_lookup_uri("$abs_path")));
header('Content-type: '.$type['content_type']);     
readfile($abs_path);

Надеюсь, это поможет кому-то в дальнейшем.

1 Ответ

1 голос
/ 20 мая 2011

Ну, я не уверен, что смогу ответить на ваш полный вопрос, но проблема в Chrome заключается в том, что ваш сервер отправляет файл как неправильный тип MIME (очевидно).Вам необходимо обновить настройки сервера, чтобы отправлять правильный тип mime для файлов css, js и т. Д.Трудно угадать тип mime для css, js и т. Д., Поскольку у них нет информации mime, хранящейся в заголовках файлов, и вместо этого вы должны догадаться.Вы можете настроить apache для установки типа mime на основе расширения с mime.types.

...