URLのリンク先がファイルかディレクトリか、どのように判断すれば良いですか?

このQ&Aのポイント
  • あるURLのリンク先がファイルかディレクトリかを判断する方法を教えてください。
  • URLのリンク先がファイルかディレクトリかを正確に判断する方法についてお聞きしたいです。
  • URLのリンク先がファイルかディレクトリかを判定するためのプログラムについて教えてください。
回答を見る
  • ベストアンサー

あるURLがファイルなのかディレクトリなのかが知りたい

用語の使い方が不正確かもしれませんがご容赦下さい。 例えば、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 以上よろしくお願いします。

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • racci
  • ベストアンサー率64% (9/14)
回答No.1

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

ggandt
質問者

お礼

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

関連するQ&A

  • URLからディレクトリ構造をテキストとして取り出す方法

    URLからディレクトリ構造をテキストとして取り出す方法 たとえば http://www.xxx.com/xxx/yyy/zzz/ といったパスから、 自動的に http://www.xxx.com ├─xxx │ ├─yyy │ │ ├─zzz のようなツリーテキストを自動的に生成する方法や ツールはありませんか。 意味不明でしたら加筆しますのでよろしくお願いします。

  • ディレクトリ名をファイル名するバッチファイル

    ディレクトリ名を取得してその名称でフォルダを作るバッチファイルを考えています。 OSはWINDOWS XPです。 こういったディレクトリがあるとします。 111~444:名称が固定のディレクトリ bbb:名称が可変するディレクトリ mmm.bat、xxx.text:111フォルダと同じところにあるファイル 111┬222─bbb┬333─yyy.text    │        └zzz.text    │    └bbb┬333─yyy.text         └zzz.text mmm.bat xxx.text mmm.batを実行すると、111ディレクトリ以下のフォルダ名を取得し、 下記のようにフォルダを作成し、yyy.textの場所にbatファイルと同じ 所にあるxxx.textをコピーして差し替えるという動作をしたいのです。 (zzz.textは内容は違うが同じファイル名です) 444┬222─bbb┬333─xxx.text    │       └zzz.text    │    └bbb┬333─xxx.text        └zzz.text バッチコマンドで、ディレクトリ名を取得して空のフォルダを作る所までは 下記のようにできたのですが、 444┬222─bbb─333    │    └bbb─333 二つのzzz.textのコピー方法と、yyy.textの場所にxxx.textをコピーするにはbbbという可変するディレクトリを通らなければいけないのでその取得方法がわかりません。 分かる方は是非お教えください。 言葉が足りないところは補足もいたします。 よろしくお願いいたします。

  • CSVファイルの""内コンマの処理

    以下のようなCSVファイルがあります。 xxx,yyy,"z,zz",XXX,"YY,Y",ZZZ,111,222 これを、 xxx,yyy,zzz,XXX,YYY,ZZZ,111,222 の様にperlで ""内のコンマを取りたいのですが、どうしたらよいでしょうか? xxx,yyy,z zz,XXX,YY Y,ZZZ,111,222 の様に""内コンマを別の文字に置き換えても可です。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • ファイルアップローダ+複数のディレクトリを削除するシステムについて

    以下のようなフォルダ構成で、複数のディレクトリを削除するシステムを構築しよと しましたが、1ディレクトリのみしか削除できませんでした。 20090601 - xxx1.txt yyy1.txt zzz1.txt のフォルダ20090601と、ファイルxxx1.txt,yyy1.txt,zzz1.txt のみしか削除できませんでした。理想は、すべてのディレクトリ、ファイルを削除しようと、試行錯誤 しましたが、なかなかうまくいきません。 わかる人がいたら、ご教授のほどよろしくお願いします。 ============フォルダ構成==================================== 20090601 - xxx1.txt yyy1.txt zzz1.txt 20090602 - xxx2.txt yyy2.txt zzz2.txt 20090603 - xxx3.txt yyy3.txt zzz3.txt 20090604 - xxx4.txt yyy4.txt zzz4.txt $_WK_dir_name[1] = "20090601" $_WK_dir_name[2] = "20090602" $_WK_dir_name[3] = "20090603" $_WK_dir_name[4] = "20090604" ============プログラム====================================== // ファイルアップロード処理 (省略) // ディレクトリ数のカウント処理 (省略) // ディレクトリとディレクトリの中身を削除 for ($i = 1; $i < 4; $i++) { // 削除するディレクトリパスを設定 $_dir_path = './' . $_WK_dir_name[$i] . '/'; printf("★1"); // ディレクトリ・ハンドルをオープン $res_file = opendir( $_dir_path ); printf("★2"); // ディレクトリ内のファイル名を1つずつを取得 while( $file_name = readdir( $res_file ) ){ // ファイルかどうか判定する if (is_file($_dir_path . $file_name)) { unlink($_dir_path . $file_name); } } printf("★3"); closedir( $res_file ); printf("★4"); rewinddir( $res_file ); printf("★5"); // ディレクトリの中身が空になったところで、ディレクトリを削除する。 rmdir($_WK_dir_name[$i]); printf("★6"); } ============================================================

    • ベストアンサー
    • PHP
  • サーチエンジンはURL直打ちを拾うことができるのでしょうか?

    とある会社さんに、SEO対策の話を持ち込んだところ 『検索エンジンの順位(ページランク)はアクセス数に比例する』 と、ものすごい力説されてる方がおられてですね、3つの点でひっかかったんで、皆様の知識を拝借したいと思った次第です。 (1)ブラウザのアドレス(IEの場合)から、目的のWEBサイトに直接URLを打ち込んで飛んだ場合、サーチエンジンなどはそれを認識・取得などをしてページランクに反映することができるのか?また、お気に入り(ブックマーク)に追加されている場合も同様に認識・取得できるのかどうか? (2)WEBサイトのページビュー数・アクセス数などをサーチエンジンは取得することができるのか? (他の方法であれ、これらを取得してサイトランクに反映することができるのか?しているのか?) (3)5つの大きなカテゴリがあった場合、http://www.xxx.jp/直下に、 ■index.html■    ├ /vvv/    ├ /www/    ├ /xxx/    ├ /yyy/    └ /zzz/ と、作る方法と http://www.vvv.jp/ http://www.www.jp/ http://www.xxx.jp/ http://www.yyy.jp/ http://www.zzz.jp/ のように、ものすごい大きなカテゴリ毎に分けてドメインを取ってしまい、各サイト毎にリンクを回す方法、どちらの方がSEO対策として効果あるのか?(ドメイン取得料金などは一切問わない) ※個人的な考え (1)YAHOOツールバーとかの仕込み(?)があれば、ブラウザのURL直打ちやブックマークを拾うのも可能なのかな? (2)WEBサーバに仕込まなきゃできないっしょ、、こんなこと・・・ (3)どっちなんでしょうねぇ・・・5ドメインの方が効果ありそうに思えますが・・ 皆様、よろしくお願いいたします。

  • エクセルVBAでテキスト保存

    エクセルのファイルをメモ帳で保存する場合に下記のコードが書いてあります。 strFILENAME = xlAPP.GetSaveAsFilename(InitialFileName:="データxxx_yyy_zzz.txt",FileFilter:=cnsFILTER, Title:=cnsTITLE) このうち、ファイル名の"データxxx_yyy_zzz.txt"、xxx, yyy,zzzをそれぞれ、特定のセルから取得したい場合、どのように直せばいいのでしょうか? xxx=A1セル yyy=A2セル zzz=A3セル といった感じです。 よろしくお願いします。

  • ExcelのVBAでの複数階層からのフォルダ名の取得

    ExcelのVBAでの複数階層からのフォルダ名の取得 下記階層に対して以下の処理をExcelのVBAで行うにはどしたら良いか、 申し訳ありませんが、どうか教えて頂きたく思います。 C:\test1   ├\aaa\ddd   │   ├\xxx1\   │   └\yyy2\   │   ├\bbb\ddd   │   └\xxx3\   │   │   └\ccc\ddd       ├\xxx4\       ├\xxx5\       └\zzz6\ 1 C:\test1を指定する 2 1で指定した中にある各\dddフォルダ内にあるフォルダ名を順に取得する 3 2で取得したフォルダ名をExcelのSheet1のA1から順に書き出す Excel   A    B    C    D    E 1 xxx1 2 yyy2 3 xxx3 4 xxx4 5 xxx5 6 zzz6 7 8 9  Sheet1 Sheet2 Sheet3 勉強不足で申し訳ありません。 どうぞ宜しくお願い致します。

  • Struts2のアクセスURLについて

    こんにちわ、現在WebLogic環境でStruts2.2 + Spring2.5 +Hibernate3.0で開発を行っています。 今回質問したい内容は、Actionクラスへのアクセス時に複数のURLを使用できないかと言うことです。 Struts2だと /コンテキストルート/namespace/アクション名 でアクションへのアクセスができると思うのですが、今回間に文字を挟み二種類のURLでそのアクションにアクセスする必要が出てきました。 # TestActionクラスへのアクセス # コンテキストルール:XXX # namespace:YYY # 挟みたい文字:ZZZ # # 二種類のURL # /XXX/YYY/test ⇐ ルートA # /XXX/ZZZ/YYY/test ⇐ ルートB 何がしたいかというとルートAとルートBでrequestUrlを見て処理を分岐させて微妙に違うことを行いたい為です。 なおxml記述は行わずアノテーションでの記載を行っています。 概要ではありますが、お力添えをお願いいたします。 以上です。

  • CGIからの絶対パス

    こんにちは。 perlのCGIでファイルをオープンする際のパス指定で悩んでいます。 cgiとは別のディレクトリにあるファイルをオープンしたいのですが、 このとき、 open(IN,"/home/XXX/YYY/ZZZ.dat"); というふうに絶対パスでオープンしようとすると、オープンできません。 一方、 open(IN,"../../../home/XXX/YYY/ZZZ.dat"); といった感じに相対パスにすると、オープンできます。 ファイルの場所は/home/XXX/YYY/ZZZ.datで間違いありませんし、 cgiとしてではなく、シェルから直接cgiプログラムを起動すると、 絶対パスでもオープンできます。 これはいったいどういうことが起こっているのでしょうか? ご存知の方、ご解説願えないでしょうか。

    • ベストアンサー
    • CGI
  • 要素名を表示させたい

    <data>   <aaa xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </aaa>   <bbb xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </bbb>   <ccc xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </ccc> </data> 上のようなXMLから、XSLのvalue-ofなどを使って、 要素名aaa、bbb、cccを表示させるにはどう記述すればいいのでしょうか?

    • ベストアンサー
    • XML

専門家に質問してみよう