错误的 MIME 类型 - 让我抓狂

错误的 MIME 类型 - 让我抓狂

我遇到了 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 &copy; 2009-<?php echo date("Y"); ?> Traq.io
            </footer>
        </div>
    </body>
</html>

删除顶行<!doctype html>解决了问题。包含的 css 文件现在被视为实际的 css 文件,并且样式最终出现。

相关内容