header("Content-type: text/css");
работает в Firefox, Chrome и других, но не в Internet Explorer 9. Я не уверен, что случилось.
В Chrome и Firework отображается таблица стилей, если я открываю ее на своей вкладке и она применяется к странице.
В Chrome под сетью в инструментах разработчика говорится, что тип – text/css
а статус – 200.
В Internet Explorer 9 он хочет загрузить таблицу стилей, если я открою ее на своей вкладке и не будет применен к этой странице.
В инструментах разработчика F12 вы можете щелкнуть по сети, начать захватывать и обновлять страницу. Он показывает Style.css.php
. Тип text/html
и результат 406.
Это в голове:
<link rel="stylesheet" type="text/css" href="/assets/css/style.css.php" media="screen" />
Заголовки запросов:
Key Value Request GET /assets/css/main.css HTTP/1.1 Accept text/css Referer http://10.0.1.5/ Accept-Language en-US User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) Accept-Encoding gzip, deflate Host 10.0.1.5 Connection Keep-Alive Cookie PHPSESSID=*Hidden*
Заголовки ответов:
Key Value Response HTTP/1.1 406 Not Acceptable Date Fri, 01 Apr 2011 10:12:42 GMT Server Apache/2.2.14 (Ubuntu) Alternates {"main.css.php" 1 {type application/x-httpd-php}} Vary negotiate TCN list Keep-Alive timeout=15, max=100 Connection Keep-Alive Content-Type text/html; charset=iso-8859-1
IE имеет « Нет, я не шучу по поводу типа Content-Type »:
X-Content-Type-Options: nosniff
BTW: убедитесь, что вы также отправили Last-Modified
и отключили session.cache_limiter
в PHP, в противном случае браузеры будут продолжать перезагружать файл CSS, что негативно скажется на производительности.
Internet Explorer имеет историю доверия к расширению файла по типу MIME, о котором сообщает браузер. Если у вас есть доступ к mod_rewrite, попробуйте HTML-файл .css, а затем создайте правило mod_rewrite, которое связывает этот URL с вашим скриптом.
Я обнаружил, что использование header("Content-type: text/css", true);
работает на меня. Он не позволяет серверу выводить 2 заголовка HTTP для «Content-Type».
Есть ли выход до отправки заголовка? Спецификация в файле php? Возвращение кареты?
Если вы отключили отчет об ошибках, вы можете не увидеть ошибку, которую он должен вызвать.
Попробуйте добавить ob_start()
сверху, он разрешит любую проблему, связанную с заголовками, уже отправленными перед вызовом header()
.
Если у вас есть спецификация в файле UTF8, вы можете удалить ее.
Я думаю, проблема может быть связана с mod_security
которая служит для страницы ошибки 401 (HTML), а не для CSS. Попробуйте добавить это в файл .htaccess
в корневом каталоге вашего веб-сайта, чтобы узнать, устраняет ли это проблему.
<IfModule mod_security.c> SecFilterEngine Off SecFilterScanPOST Off </IfModule>
Статья Handle Images / CSS / JS как PHP без httpd.conf Использование .htaccess помогло мне разобраться в проблеме.
В основном вы делаете все те же вещи, что и все остальные (настройка заголовка на PHP и т. Д.), Но также используйте .htaccess
для установки параметра AddHandler.
<Files my_style.css> ForceType application/x-httpd-php AddHandler application/x-httpd-php .css </Files>
Таким образом, вы можете назвать его с помощью .css и все еще иметь PHP, анализируя его.
Для Internet Explorer 9, обслуживающего код статуса HTTP 406 в заголовке ответа для динамически созданного файла CSS, мы:
Добавлено правило перезаписи для конфигурации виртуального хоста или htaccess:
<IfModule mod_rewrite.c RewriteEngine on RewriteBase / #serve CSS and JS from combine.php RewriteRule ^combine(.*) combine.php [NC,L] </IfModule>
Примечание. Это решение подходит только для серверов / виртуальных хостов, не использующих Multiviews, поскольку удаление mod_negotiation также позволяет использовать эту директиву.
Недавно у меня тоже была такая проблема. Отвратительная отладка – все, что я могу сказать об этом. Не уверен, что это может помочь вам людям, но я надеюсь, что так оно и будет. В погоню.
Internet Explorer использует что-то вроде нюхания типа Mime, которое просто читает 200 байтов заголовка FILE.
У меня был PHP-скрипт, который должен был возвращать разные видеофайлы (с данными – весь файл) в зависимости от параметра, которому он был поставлен.
Пример моего видео-запроса: get-video.php? Id = here_goes_the_id
$file = ''; // Get the video file path if (is_file($file)) { header("Content-Type: video/mp4"); header("Content-Length: " . filesize($file)); readfile($file); } exit(); // This is the turnaround
Вы должны приостановить свой скрипт сразу же после отправки данных файла. Это предотвращает обнюхивание типа IE Mime.
Надеюсь, поможет.