• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:cgiのパスについて)

CGIのパスに関する疑問とは?

このQ&Aのポイント
  • CGIのパスに関する疑問について、理由や実態、拡張子についての考えられる要点を解説します。
  • http://・・・/cgi-bin/app.cgi/form/contact?contact=01というパスの意味と理由について詳しく知りたいです。
  • お問い合わせフォームのCGIにおけるパスについての疑問を解決するために、パスの構成要素や可能性について考察します。

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

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

本当に基本的な事ですが・・ HTTPプロトコルでの通信は GET /cgi-bin/form/contact/app.cgi?contact=01 以下省略 とGETで、サーバーに要求します。(POSTなどもある) ※#以下はブラウザ側に必要な情報なのでサーバーには送られません。 1) サーバーは、その要求・・に、?があればそれ以下の文字列をQUERY_STRINGという環境変数に格納します。CGIはそれを利用できます。$ENV{'QUERY_STRING'}ですね。 2) ついで、指定されたパスに従って  /  |-- cgi-bin/     |-- form/        |-- contact/           |-- app.cgi  というファイルを探します。 ※ここからがWindowsと大きく異なる部分  app.cgiがファイルだったら、それを提供します。  app.cgiが実行ファイルでしたら、実行権限があれば実行します。   実行するプログラムはファイルの最初に書いてあるか、サーバーの指定   すべて、サーバー側の設定です。Windowsのように拡張子もレジストリは使わない。  app.cgiがディレクトリでしたら、それを開いてみる。   ・内部にDIRECTRY_INDEXで指定されたファイルがあるとそれを提供、    または上記の通り実行する。   ・なければ、NOT FOUNDを返す。  app.cgiがなければ、/appcgiは環境変数PATH_INFOに格納して上位のcontactを調べる。  これを/cgi-binまで繰り返します。   極めて単純な文字通り機械的処理で/ルートまで進みます。 >app.cgiが実態っぽいという場合は、/form/contactは何のためにあるのでしょうか。  どれが実体であるかは、ユーザーにはわかりませんし、知る必要もないです。  たぶん、ディレクトリ(Windowsではフォルダー)を示しているものだと思われます。  ひょっとして実体は/cgi-bin/form/contact、/cgi-bin/form、あるいは/cgi-binかもわかりませんし、/cgi-bin/form/contact/index.cgi、/cgi-bin/form/index.cgi、あるいは/cgi-bin/index.cgi、はたまた/cgi-bin/abc.php かも知れません。 >contactが実態っぽいという場合は、単に拡張子を消しているだけでしょうか。  拡張子はWindows以外のOSでは一切関係ありません。contactが実行ファイルかもしれませんし、それはディレクトリかもしれません。  このページのURLが http://okwave.jp/qa/q8588097.html  であっても、8588097.htmlというファイルは実在しません。

umioyo
質問者

お礼

詳細にご説明いただきましてありがとうございました。 大変わかりやすい説明でした。

その他の回答 (1)

回答No.1

多分、PATH_INFOです。 app.cgiの PATH_INFO="/form/contact?contact=01" と変数に格納された状態で起動するので、 たとえば、サーバー内部にもう一つ外から見えないCGIがあったとき、 app.cgiを踏み台としてあがるのにも使えます。 が、これをやるときは、app.cgi の cgiは省略できるようにする人が多いと思いますけどね。 出来ることを紹介しただけなので、このCGIがなぜこれをやったか?は もちろん、第3者にはわかりませんが。 http://・・・/cgi-bin/app/form/contact?contact=01 このアドレスで、実は「app」はパスではなく、CGIだ!って感じの 使い方は、割と多く使うと思いますよ。

umioyo
質問者

お礼

ありがとうございました。 PATH_INFOははじめて聞いたので調べてみようと思います。 要するにセキュリティのため、ということですね。

関連するQ&A

専門家に質問してみよう