| « New pear bootstrap code | cha-ki-sho - b2evolution 0.9.1 の日本語対応 » |
406 Not Acceptable
サーバのログを見てると、406という奇妙なエラーが出ている。どうやら、
にあるように、クライアント側がAcceptヘッダにMIMEタイプを明示してリクエストしてきた時、サーバが適切なコンテンツを見付けられなかった場合に発生するらしい。
通常、Webブラウザは、どのデータも受け取れるように、
Accept: */*
などワイルドカードを付けてリクエストしてくる場合が多いけど、例えば、サーバ側にtest.xmlというファイルが存在して、クライアントがMIMEタイプを
GET /test Accept: text/html
などと明示してきた場合、サーバ側にはtest.xmlは存在するにも拘らず、test.htmlは存在しないので、
HTTP/1.1 406 Not Acceptable
Alternates: {"test.xml" 1 {type application/xml} {length 1234}}
などと、代替案として、存在するもののリストを返して終了する(HTTP/1.1のコンテントネゴシエーションを使用している場合)。
ま、このエラーがHTTPDのログに出ていたケースでいえば、PHPスクリプトに拡張子を付けてないURIにアクセスされた時、要するに、このブログ(b2evolutionのスタブファイル)に拡張子なしでアクセスした時で、
% curl -I http://www.xdelta.net/blog/FreeBSD -H 'ACCEPT: text/html'
HTTP/1.1 406 Not Acceptable
Date: Fri, 09 Dec 2005 13:09:28 GMT
Server: Apache
Alternates: {"FreeBSD.php" 1 {type application/x-httpd-php} {length 2374}}
Vary: negotiate
TCN: list
Content-Type: text/html; charset=iso-8859-1
で再現できる。
でも、このエラーを出してるUser-Agentは、見た感じ、今のところは、
- Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://sp.ask.com/docs/about/tech_crawling.html)
だけだし、どうしようかな? クライアントが悪いような気がしないでもない。
該当するPHPスクリプトの拡張子を取り除いて.htaccessなんかに
<Files ~ ^FreeBSD$> SetHandler php-script </Files>
って書いてPHPスクリプトとしてハンドルさせれば解決すると思うけど、あまり多用はしたくないし・・
Follow up:
やっぱり、コンテントネゴシエーションを使用して、FreeBSD.phpに回すのではなく、
# ln -s FreeBSD.php FreeBSD # ln -s all.php all
などとして、symlinkを張ることにした。そのまま、FreeBSDのURIにアクセスすると、PHPのソースが表示されてしまうので、
<Files ~ ^(?:FreeBSD|all)> SetHandler php-script </Files>
とハンドルさせる。
なぜ、本体に.phpの拡張子を付けておくことに拘ったかというと、整理しやすいってこともあるけど、使っているエディタが.phpの拡張しなしでは、PHPスクリプトと認識してくれず、不便だったから・・
Trackback address for this post
Trackback URL (right click and copy shortcut/link location)
1 trackback
This post has 455 feedbacks awaiting moderation...