我遇到了 CSS 文件被 Apache 错误地标记为 text/html 的问题。文件类型与浏览器不匹配,并被忽略,导致显示失败。
我在 RHEL 5 服务器上使用 Apache 2.2.3。
我尝试将其添加到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 1.2.3.4:80>
ServerName my.site.com
ServerAdmin [email protected]
DocumentRoot /var/www/mysite/
# Log info redacted #
</VirtualHost>
虚拟主机 SSL 配置:
<VirtualHost 1.2.3.4:443>
ServerName my.site.com
ServerAdmin [email protected]
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>
以下是我从 shell 获得的信息:
[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
我终于发现了问题所在。特拉克安装视图文件 install/views/layout.php 在此文件顶部包含一个文档类型:
<!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 文件,并且样式最终出现。