- 2010年9月18日 12:30 AM
- Linux

先日、お知らせメールでApache2とPHPの組み合わせに、MultiViewsを設定しました。
そうすると、Yahoo! Site Explorerの認証時に”406 Not Acceptable“のエラーが返されてしまいました。
どうやら、PHPファイルのMIMEタイプの設定が悪かったようです。
今回はメモ書き程度に、この設定方法をまとめます。
MultiViewsとは
そもそも、MultiViewsとは何でしょうか。
リソースをネゴシエーションするためには、 サーバは variant それぞれについての情報を知っておく必要があります。 これは以下の二つの方法のどちらかで行われます。
タイプマップ (すなわち *.var ファイル) を使う方法。 これは variant を明示的に挙げているファイルを指定します。
‘Multiviews’ を使って、サーバが暗黙の内にファイル名にパターン照合を 行なってその結果から選択する方法。
コンテントネゴシエーション – Apache HTTPサーバより
これにある通り、”複数あるファイルの選択肢から、クライアント側のHTTPヘッダ情報を元に送り返すファイルをApache2に選ばせる“機能です。
mod_negotiationというApacheモジュールに含まれています。
クライアント、よく使うのはFirefoxやSafariのWebブラウザですね。
このWebブラウザはサーバに対してHTTPヘッダを送信しています。

サーバはこのHTTPヘッダを読み、その上で適切なファイルを選び、クライアントに送り返します。

これを使って何が出来るか、というと.php拡張子がついたPHPファイルに拡張子なしのURLでアクセス出来ます。
Apache2での設定
まず、MultiViewsを設定します。
Optionsディレクティブに+MultiViewsを指定するだけです。
<Directory /var/www/> Options -Indexes FollowSymLinks +MultiViews AllowOverride All Order allow,deny allow from all </Directory>
“Options All“だとMultiViewsがオンにならないため、注意が必要です。
次にPHP側の設定です。
設定方法はPHPのドキュメントに書いてあります。
デフォルトでは、PHPファイルのMIMEタイプは以下のように”application/x-httpd-php“に設定されています(設定ファイルはdebian系ならmods-available/php5.confに、RedHat系ならconf.d/php5.confにあります)。
<IfModule mod_php5.c> AddType application/x-httpd-php .php .phtml .php3 AddType application/x-httpd-php-source .phps </IfModule>
これを以下のように変更します。
<IfModule mod_php5.c> AddHandler php5-script php AddType text/html php </IfModule>
これだけです。
これだけでPHPファイルに対して、MultiViewsが有効になります。
もちろん、”406 Not Acceptable“も発生しません。
ただし、この方法はApache 1.xだとうまく動かないようです。
詳しくは公式サイトを。
406 Not Acceptable
なぜ、デフォルトの設定だとYahoo! Site Explorerのクローラを通さないのでしょうか?
それは”クライアントが送ってきたHTTPヘッダを元に送り返すファイルを決定する“というMultiViewsの性質のせいだと思います。
デフォルト設定におけるPHPのMIMEタイプは”application/x-httpd-php“です。
このMIMEタイプだとクライアントがAcceptフィールドとして”text/html“だけを送ってきた場合に、サーバが適切なファイルとしてPHPファイルを選択出来ません。
その結果が”406 Not Acceptable“です。

これをPHPファイルが”html/text“だと指定してやることで、クライアントがAppectフィールドとして”text/html“を送ってきた場合に、サーバがPHPファイルを選択出来るようになります。

簡単な説明ですが、理解出来たでしょうか?
そもそも、この説明が間違っている可能性もあるのですが…。
ちょっとサーバ周りで問題が出たので調べてまとめてみました。
間違いがある場合はご指摘ください。
ちょっと一言
前の記事のPVが伸びていてびっくりしてます。
大したこと書いてないんだけどな...。
あとここまで伸びたら、ちゃんとやらなきゃいけないじゃないかw
ま、マイペースに頑張りましょう!まずは"初めてのPython"の書評を書きますね。
-
http://topsy.com/1-byte.jp/2010/09/18/multi_views_for_php_and_apach2/?utm_source=pingback&utm_campaign=L2 Tweets that mention PHP + Apache2でMultiViewsを設定する方法 — Topsy.com

