[PHP-users 34905] Re: get_headers() で 存在しないURLを指定しても『HTTP/1.1 200 OK』が返ってくる

浅川 倫之 tom @ asakawa.ne.jp
2009年 12月 27日 (日) 19:02:14 JST


あさかわ

> $url = 'http://www.hoge.co.jp/'


> ちなみに『http://www.php.net/』を指定すると下記内容が返ってきます。

これ等で、200が返るのは、正常ですよ。
ブラウザでも404にならないでしょう?

通常、URLの末尾が、/で,終わる場合。

inodex.php index.html index.cgi
など、WWWサーバの設定次第ですが,自動的に探して応答します。

php.netの場合。
index.phpを応答してます。

>ただ、URLに『http://www.hoge.co.jp/index.html』とファイル名を指定すれば
この場合は、ほんとに無いからでしょう。

しかし、php.netの場合。
存在しないURLの場合

http://jp.php.net/manual-lookup.php
に、強制的リダイレクトします。

なので、404は返りません。
本来は、この場合は、404を返してかつ、マニュアルを表示するべきだと思うのですが。
IEに、HTTPエラーの簡易表示という便利(腐った)機能があってかつそれが、デフォルトなのです。
404を返すと、ブラウザが、勝手に、わかりやすい(とMSが思ってる)表示を行うので
404を返さない作りにせざるを得ません。


ちなみに

$url = 'http://www.hoge.co.jp/'
ではなく

$url = 'http://www.hoge.co.jp'

/をつけない場合も、それが、トップもしくは、デイレクトリだった場合は
サーバ内で、/がURL末尾になった時と同じ挙動になります。

いずれにしても、サーバの設定によります。PHPプログラムで解決できる問題はないです。

ブラウザで、そのURLを指定して、404が出ないなら、PHPでも判定できません。







PHP-users メーリングリストの案内