プロが教える店舗&オフィスのセキュリティ対策術

用語の使い方が不正確かもしれませんがご容赦下さい。

例えば、http://www.foobar.jp/xxx というURLがあった場合に、xxx の部分がファイルなのか、あるいはディレクトリなのか、あるいはスクリプトなのか、を知るにはどうしたらいいでしょうか?

現在、以下のようなプログラムを作成しています。
・あるURLを指定する。
・そのURLが指すページの内容を取得する。
・そのページの中にあるリンクを全て取得する。
・取得したリンクをフルパスに変換して出力する。

この際、
・指定したURLがホスト名のみ
・指定したURLが / で終わっている
・取得したリンクがフルパス
・取得したリンクが / で始まっている
ような場合は問題ないのですが、

・指定したURLがホスト名のみでなく、かつ / で終わらず、かつ取得したURL が / ではじまらない
といった場合は、どのようにフルパスを組み立てたらいいかがわかりません。

例えば、指定したURLが「http://www.foobar.jp/xxx」、取得したリンクが「yyy/zzz」のような場合、出力すべきフルパスは以下の2種類が考えられますが...

http://www.foobar.jp/xxx/yyy/zzz
http://www.foobar.jp/yyy/zzz

以上よろしくお願いします。

A 回答 (1件)

>例えば、指定したURLが「​

http://www.foobar.jp/xxx​」、
>取得したリンクが「yyy/zzz」のような場合、
>出力すべきフルパスは以下の2種類が考えられますが...
http://www.foobar.jp/xxx/yyy/zzz
http://www.foobar.jp/yyy/zzz

http://www.foobar.jp/xxx がもしディレクトリの場合、
Webサーバは通常 http://www.foobar.jp/xxx/ にリダイレクトします。
リダイレクトした場合には、http://www.foobar.jp/xxx/yyy/zzz
フルパスとするのが正解です。

リダイレクトしない場合は、xxx がファイルであるとみなして、
http://www.foobar.jp/yyy/zzz をフルパスとするのが正解です。

ただし、リンクのフルパスを得るには、BASEタグを読む必要があります。
例えば、http://www.foobar.jp/xxx/index.htmlのHTMLに、
<BASE href="/QQQ/">と書いてあった場合、
<A href="xxx/yyy.html">link</A>のリンク先は、
http://www.foobar.jp/QQQ/xxx/yyy.html になります。
    • good
    • 0
この回答へのお礼

ありがとうございました。
リダイレクトするというのは知りませんでした。またBASEタグの件もおっしゃるとおりですね。
LWP::UserAgentを利用してページを取得するので、ヘッダの情報なども参照すればうまく処理できそうです。

お礼日時:2007/04/24 18:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!