httpd.conf php 設定メモ

■ Webにおける拡張子の取り扱い(MIMEタイプ)

Webの世界では拡張子という概念と、もうひとつ『MIMEタイプ』という概念があります。MIMEタイプとは「タイプ名/サブタイプ名」の形式の文字列で、WEBサーバーとWEBブラウザの間はこのMIMEタイプを用いてデータの形式を指定しています。例えばMIMEタイプには以下のようなものがあります。

ファイル形式一般的な拡張子MIMEタイプ
テキスト .txt text/plain
HTML文書 .htm .html text/html
XML文書 .xml text/xml
JavaScript .js text/javascript
VBScript .vbs text/vbscript
CSS .css text/css
GIF画像 .gif image/gif
JPEG画像 .jpg .jpeg image/jpeg
PNG画像 .png image/png
CGIスクリプト .cgi application/x-httpd-cgi
Word文書 .doc application/msword
PDF文書 .pdf application/pdf

x- で始まる名前は、まだ標準化されていない仮の名前です。標準化された名前の一覧は下記にあります。

ブラウザが xx.gif というファイルをWEBサーバーに要求する際、WEBサーバーはxx.gifの内容(データ)を「これは image/gif タイプのデータです」と言いながら返却してくれます。これにより、ブラウザは受け取ったデータを正常に処理することができるのです。

しかし、Internet Explorer などのブラウザでは、この MIMEタイプの情報を無視して拡張子の方を信用したり、MIMEタイプや拡張子を無視してファイルの中身を見て「text/plain と言っているけど、これは HTML文書みたいだから、HTMLとして表示してあげるね」と、いらぬお節介をするブラウザもあり、なかなか、期待通りには制御できないのが実状のようです。

 

 

 

Webサーバで公開されているファイルはテキストファイルやHTMLファイルだけではありません。画像や動画など様々なファイルを扱います。クライアントからリクエストがあったファイルに対して、WWWサーバはファイルの内容を返すと同時にそのファイルがどのような種類のファイルなのかを合わせてクライアントへ返します。その結果、クライアント側は取得したデータを適切な表示方法で扱うことが出来るようになります。

基本となるMIMEタイプと拡張子の組み合わせはデフォルトでは「mime.types」ファイルで登録されています。このファイル名及び設置ディレクトリは「TypesConfig」で設定されています。

それでは「httpd.conf」ファイルで「TypesConfig」で検索してみてください。363行目付近に次の記述が見つかります。

 

既に登録されている拡張子の他に、別の拡張子に対するMIMEタイプを追加で登録することが出来ます。その場合は「mime.types」に追加で記述する代わりに「httpd.conf」ファイル内で「AddType」を使って記述することが推奨されています。

AddType MIMEタイプ 拡張子

MIMEタイプと拡張子をセットで指定します。

それでは「httpd.conf」ファイルで「AddType」で検索してみてください。363行目付近に次の記述が見つかります。

 

例としてPHPのファイルである「.php」及び「.phps」に対するMIMEタイプの設定を行うには次のように記述します。

<IfModule mime_module>

    #
    # AddType allows you to add to or override the MIME configuration
    # file specified in TypesConfig for specific file types.
    #
    #AddType application/x-gzip .tgz
    #
    # AddEncoding allows you to have certain browsers uncompress
    # information on the fly. Note: Not all browsers support this.
    #
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    #
    # If the AddEncoding directives above are commented-out, then you
    # probably should define those extensions to indicate media types:
    #
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps

</IfModule>

( Written by Tatsuo Ikura+ )