CSSファイルがApacheによってtext/htmlと誤ってマークされるという問題があります。ブラウザでファイルタイプが一致せず、無視されて表示エラーが発生します。
RHEL5サーバーでApache2.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>
これが私がシェルから得ているものです:
[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
3つすべての点で間違っています。
これが私の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"
だから...私はここで何を見落としていますか?
私はついに問題を発見しました。 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ファイルとして表示され、最終的にスタイルが表示されます。