HTMLファイルのページがHTMLソース丸見えで表示されてしまう原因と解決方法
同一のHTMLファイルをブラウザで閲覧しているにもかかわらず、閲覧するブラウザの種類によっては、以下のような生のHTMLソースが表示されてしまうことがある。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<meta name="generator" content="Movable Type Pro 4.25" />
<link rel="stylesheet" href="https://nobuneko.com/blog/styles-site.css" type="text/css" />
<link rel="start" href="https://nobuneko.com/blog/" title="Home" />
<link rel="alternate" type="application/atom+xml" title="Recent Entries" href="https://nobuneko.com/blog/atom.xml" />
<script type="text/javascript" src="https://nobuneko.com/blog/mt-site.js"></script>
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://nobuneko.com/blog/rsd.xml" />
<title>r_nobuホームページ</title>
</head>〜〜〜(以下略)〜〜〜
このように、HTMLファイルがブラウザによってHTMLページとして処理されず、まるでテキストファイルのように生の情報がそのまま表示される場合、Webサーバ側の設定でHTMLファイルをどのように処理するのか、という設定がきちんとできていないことを疑う必要がある。
Webサーバで使用しているWebサービスのソフトウェアがApacheの場合、以下の設定を確認し、対応していくことになる。
(1)MIME typeの設定
MIME typeは、mime.typesというファイルで設定する。
mime.typesファイルは、Windows版のApach 2.2の場合はApacheのインストールフォルダ配下のconfフォルダ直下、(Linuxの)CentOS 5でパッケージインストールをしたものであれば、/etcディレクトリ直下にある。
mime.typesファイルを(catコマンド、viコマンド等で)確認し、
text/html html htm
となっていれば、問題ない。
※左側の「text/html」が「Content-Type」(コンテントタイプ)で、右側の「html htm」がファイルの拡張子を表す。上記の記述になっている場合、.html拡張子、.htm拡張子のファイルをコンテントタイプ「text/html」としてApacheが扱うことを意味している。
上記の設定になっていなければ、まずは、何故、上記のようになっていないかの理由を確認した上で、上記の設定にする。(理由を確認できない場合は、このファイルでの修正は見送り、.htaccessで修正対応をする、といったことを検討した方が良い場合もある。)
※設定を変更した場合は、Apacheを再起動して設定を反映する必要がある。
(2).htaccessの設定
もし、.htaccessファイル内に
RemoveType .html .htm
といった記述があった場合、Apacheの設定ファイル「mime.types」 で記述されている、.html拡張子、.htm拡張子のファイルの「Content-Type」(コンテントタイプ)の定義が削除されていることを意味する。
RemoveTypeは、何らかの理由で、拡張子に関連付いている「Content-Type」(コンテントタイプ)を削除したい場合に使うことがある。
例えば、上位ディレクトリに設置した.htaccessで、
AddType application/x-httpd-php .html .htm .php
と記述し、.html、.htm、.phpといった拡張子のファイルに「application/x-httpd-php」という「Content-Type」を設定していた場合、これらのファイルは、PHPとして動作させることができる。
しかし、下位ディレクトリにおいては、.html、.htm拡張子のファイルは、PHPとして動作させたくない、つまり、「application/x-httpd-php」という「Content-Type」を削除したい場合がある。そのような時に、PHPとして動作させたくないディレクトリに.htaccessファイルを設置し、同ファイル内でRemoveTypeの記述を行って対処することがある。
この時に見落としがちなのが、
RemoveType .html .htm
とすると、上位ディレクトリの.htaccessファイルで定義されている「Content-Type」だけを削除するのではなく、Apacheの設定ファイル「mime.types」 で記述されている
text/html html htm
といった標準の「Content-Type」も削除されてしまうことだ。
そのため、.html拡張子、.htm拡張子のファイルは、ApacheではHTMLファイルとして扱われず、.txt拡張子のファイルと同じ、つまり、「Content-Type」が「text/plain」として処理されるため、ブラウザでHTMLファイルを開いた時にHTMLソースが丸見えになってしまう。
この問題を解決するには、
RemoveType .html .htm
の記述の後で、
AddType text/html .html .htm
として、.html拡張子、.htm拡張子のファイルの「Content-Type」を「text/html」と再定義すれば良い。
そうすれば、HTMLファイルとして処理されるようになるので、HTMLソース丸見えの問題は解決する。
※.htaccessファイルの修正を行った場合は、Apacheの設定ファイルとは異なり、Apacheの再起動は不要。