Неверный тип MIME - выдергивание волос
У меня проблема с файлами CSS, которые Apache неправильно помечает как text / html. Тип файла не соответствует в браузере и игнорируется, вызывая сбои отображения.
Я использую Apache 2.2.3 на сервере RHEL 5.
Я пытался добавить это к httpd.conf
и перезагрузка конфигурации с service httpd reload
:
AddType text/css .css
Без изменений, как видно из браузера. Мой CSS-файл все еще показывает text/html
(даже когда я использую php curl для проверки типа MIME.. это не имеет значения, сервер отправляет text/html
файл)
Затем я прокомментировал следующие строки из httpd.conf
, чтобы убедиться, что что-то пошлое не происходит с магией:
LoadModule mime_magic_module modules/mod_mime_magic.so
<IfModule mod_mime_magic.c>
MIMEMagicFile /usr/share/magic.mime
MIMEMagicFile conf/magic
</IfModule>
Как только они были отложены, я сохранил и перезагрузил конфигурацию. Без изменений. Файлы.css все еще встречаются как text/html
,
Стандартный конфиг Virtualhost:
<VirtualHost 1.2.3.4:80>
ServerName my.site.com
ServerAdmin me@site.com
DocumentRoot /var/www/mysite/
# Log info redacted #
</VirtualHost>
Конфигурация Virtualhost SSL:
<VirtualHost 1.2.3.4:443>
ServerName my.site.com
ServerAdmin me@site.com
DocumentRoot /var/www/mysite/
# Log info redacted #
# SSL Certificate config redacted #
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
Вот что я получаю из оболочки:
[boxor]# file --mime install.css
install.css: text/x-c; charset=us-ascii
Вот что я получаю от php:
$file = 'https://my.site.com/traq/install/install.css';
echo mime_content_type($file);
$file = $_SERVER['DOCUMENT_ROOT] . '/traq/install/install.css';
echo mime_content_type($file);
возвращает:
text/html; charset=UTF-8
text/plain
Неправильно по всем трем пунктам.
Вот строка из моего журнала доступа apache (с добавленным Content-type):
1.2.3.4 - - [10/Oct/2012:08:32:38 -0400] "GET /traq/install//install.css HTTP/1.1" 200 2600 "http://my.site.com/traq/install/" "text/html" "Mozilla/5.0 blahblah Firefox/15.0.1"
Несуществующий файл CSS, включенный в ту же страницу, также возвращается как "text/html":
1.2.3.4 - - [10/Oct/2012:09:11:11 -0400] "GET /traq/install/idontexist.css HTTP/1.1" 200 2600 "http://my.site.com/traq/install/" "text/html" "Mozilla/5.0 blahblah Firefox/15.0.1"
Итак... Что я здесь пропускаю?
1 ответ
Я наконец обнаружил проблему. Файл представления установки Traq, install/views/layout.php, содержал doctype в верхней части этого файла:
<!doctype html>
<html lang="en" dir="ltr">
<head>
<title>Traq Installation<?php echo isset($title) ? " / {$title}" :''; ?></title>
<style type='text/css'>
@import '/traq/install/install.css';
@import '/traq/install/test.css';
</style>
</head>
<body>
<div id="wrapper">
<header id="head">
<h1>Traq Installation</h1>
<h2><?php echo isset($title) ? $title :''; ?></h2>
</header>
<div id="page">
<?php echo $output; ?>
</div>
<footer>
Traq © 2009-<?php echo date("Y"); ?> Traq.io
</footer>
</div>
</body>
</html>
Снятие верхней линии <!doctype html>
решил проблему. Включенные CSS-файлы теперь рассматриваются как актуальные CSS-файлы, и, наконец, появляются стили.