[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 メーリングリストの案内