• ベストアンサー

URLにCGIのファイル名を出さない方法

同じCGIを使ってサービスしているサイトで、URLにCGIのファイル名を含むサイトと 含まないサイトがあります。例えば bbs.cgi というCGIだとすると、  (A) http://foo.com/bbs.cgi/page01  (B) http://bar.com/page01 というサイトがあります。この違いはどこから来るのでしょうか? 同じCGIを入手してインストールしましたが、現状(A)の状態です。 (B)のようにしたいと思っていますが、やり方が分かりません。 よろしくお願いいたします。

  • HTML
  • 回答数4
  • ありがとう数3

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

  • ベストアンサー
  • tracer
  • ベストアンサー率41% (255/621)
回答No.3

配布されているCGIの説明に、htaccessの項目があると思うので、探してみてください。

honda_tx
質問者

お礼

解決しました。 同CGIの解説サイトから、.htaccessの記述をコピペしていたのですが、 それでは記述が足りなかったようです。 mod_rewrite の仕様を確認して自分で記述し直したら期待通りの動作となりました。 ありがとうございました。

honda_tx
質問者

補足

見た限り配布物に説明は無かったのですが、関連サイトでおっしゃる通り .htaccess に rewrite を記述する方法が載っていました。 方法はこれで間違いないようです。 残念ながら、説明通りに記述し、エラーも出ておらず、mod_rewrite も有効と 思われるのですが、期待に変化は見られません。

その他の回答 (3)

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

>つまり、最初 http://foo.com/ として開くことは可能ですが、CGIが生成した >ページ内のリンクをクリックすると http://foo.com/bbs.cgi/hoge 等のように >普通にCGI名を含んだリンクのアクセスになってしまうこと言うことです。 ・http://foo.com/page01 と入力しても http:/foo.com/bbs.cgi/page01 は 開きません  これはサーバーの設定です。PATH_INFOに格納して上位ディレクトリを探す設定が外してある。  mod_rewrite  Options FollowSymLinks を確認 ・、CGIが生成したページ内のリンクをクリックすると http://foo.com/bbs.cgi/hoge 等のように普通にCGI名を含んだリンクのアクセスになってしまう  それはCGIのほうがおかしい。リンク先が、相対配置で  ./hoge となっていれば、ユーザーエージェントは、http://foo.com/hogeのしなければならない。 環境変数  SCRIPT_FILENAME  SCRIPT_NAME  PATH_INFO の処理を確認してください。

honda_tx
質問者

お礼

補足の mod_write は mod_rewrite のタイプミスです。訂正します。

honda_tx
質問者

補足

apache.conf で mod_write をロードしようとすると、すでに build in である旨の メッセージが表示されます。FollowSymLinks は設定しています。 (回答3の補足に書いたのですが、.htaccess に rewriteの設定を記述しました) CGIは同じCGIで多数のサイトが稼働していますので、間違いはないと思います。 rewriteの設定後、ページの再構築をしないとすぐには反映されない、 との事のでしたので、念のため再構築してみましたが、現状では rewriteの設定自体が効いていないようなので、変化ありませんでした。 .htaccess は機能しており、Rewrite の記述に関してエラーは出ていません。 もう一歩だと思うのですが・・・。確認するべき点があったら教えて下さい。

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

いくつか方法があります。 ABCというファイル名にして、そのファイルがCGIだとサーバーに認識させる。 ABC/ディレクトリに、index.cgiなどの名前で保存し、DIRECTRY INDEXに記載してあるファイル名にindex.cgiを含め、かつそれより上位のファイルを置かない http://bar.com/page01 apacheのhttpd.confにて、 <IfModule dir_module> DirectoryIndex index.html index.htm index.cgi index.sh </IfModule> としてある場合、index.html index.htm がないと、index.cgiがDirectryIndexとして利用されます。  また、index.htmlをCGIにしても構いません。 AddType application/x-httpd-cgi index.html ;  ★この場合、下位ディレクトリにあるすべてのindex.htmlがCGIとして実行されようとするためまずいですね。  なお、page01はPATH_INFOとして使われているのでしょう。

honda_tx
質問者

補足

DirectoryIndexに直接CGIファイル名を指定する事により、 「トップページを開く時にCGIファイル名を省略すること」は出来ています。 例えば http://foo.com/ と入力すると http:/foo.com/bbs.cgi として処理されます。 しかし、http://foo.com/page01 と入力しても http:/foo.com/bbs.cgi/page01 は 開きませんし、そもそもCGIが生成するページ内のリンクもそのようにはなっていません。 つまり、最初 http://foo.com/ として開くことは可能ですが、CGIが生成した ページ内のリンクをクリックすると http://foo.com/bbs.cgi/hoge 等のように 普通にCGI名を含んだリンクのアクセスになってしまうこと言うことです。 実際のサイトでは、(B)はページ内のリンクも全てCGIファイル名を含まないURLで 構成されており、どこをどうアクセスしてもURLにCGIファイル名は出て来ません。 また、同CGIを使ったサイトでは(B)が多数派で、(A)は少数派です。 この差がどこから来るのか分かっていません。

  • PXU10652
  • ベストアンサー率38% (777/1993)
回答No.1

「(B)のようにしたいと思っていますが、やり方が分かりません。」  それが掲示板の場合、ページをフレーム構成にして、掲示板のタイトルだけのページとcgiのページ(http://foo.com/bbs.cgi)を上下に表示するだけのindex.htmlを「bar.com/page01」に配置すれば、cgiの部分を隠せます。 例) タグとして認識されないように、わざと2バイト文字で記載 <frameset rows=”100、*”>  <frame src=”header.html” scrolling=”no”>  <frame src=”http://foo.com/bbs.cgi”> </frameset

honda_tx
質問者

補足

やって見ましたがフレームだけ表示されてCGI部分は表示されませんでした。 (src= に指定したURL単独では表示されることは確認しています) また、(B)のようにアクセスできるサイトのページソースを見てみましたが、 frameタグは使用していませんでした。 よろしくお願い致します。

関連するQ&A

  • このような掲示板のCGIを探しています

    私の使用しているプロバイダでは通常のHPのURLと、CGI専用のURLがあります。 通常)http://www.aaa.com/index.html CGI)http://cgi.aaa.com/bbb.cgi 掲示板を置きたいのですが、私が探してきたCGIスクリプトはどれも http://cgi.aaa.com/xxx.cgi のような感じで使用するものばかりで、できればURLを http://www.aaa.com/bbs.html としてcgi は<form action="........>で指定するだけにしたいと思っています。 BBSは通常の(tcupなどにあるようなモノ)と、スレッド式の両方欲しいです。 このようなCGIスクリプトをご存知の方、どこのサイトにそのようなものがあるか 教えて頂けないでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • .htaccessを用いて.cgiを.htmlにリダイレクトしたい

    .htaccessを用いて.cgiを.htmlにリダイレクトしたい 現在webサイトで以下のようなURLが表示される掲示板を設置しています。 http://hoge.com/bbs1/bbs.cgi?nd=dd&parent=32 http://hoge.com/bbs1/bbs.cgi?nd=dd&parent=500 (最後の数字は10から500くらいまであります) これを過去ログにするため、html化しました。 http://hoge.com/log1/32.html http://hoge.com/log1/500.html しかし以下のような.htaccessを、/bbs1/以下に設置しても、htmlに転送することができません。 RedirectPermanent /bbs1/bbs.cgi?nd=dd&parent=32 "http://hoge.com/log1/32.html" ちなみに以下のようなhtmlファイル同士の転送はできます。 RedirectPermanent /bbs1/index.html "http://hoge.com/log1/index.html" 301リダイレクトでcgiをhtmlに転送することはできないのでしょうか? もしおわかりになりましたらご教授いただけますと大変有り難いです。

    • ベストアンサー
    • CGI
  • flashから別サーバーにあるCGIを起動

    別サーバにあるCGIを起動する方法で行き詰っております。 どなたかアドバイスをお願いいたします。 ■現状 A社のサーバーにHTML(SWFも含む)を入れて、B社のサーバー(UNIX,Perlバージョンは最新)にあるCGIを起動させたいと考えています。(B社の中で同サーバーにHTMLとCGIを入れてテストした場合は問題なく動いています。) しかし、A社のサーバーにHTMLをアップしてもらうと、HTMLやSWFは問題なく閲覧できるのですが、B社のCGIが起動しません。これを解決したいのですが、なんとかいい方法はないでしょうか。 A社のアドレスはhttp://www.xxx.com/とします。 B社のCGIが入っているアドレスはhttp://www.zzz.com/cgi-bin/とします。 以下を試していますが、A社のサーバーでは動きませんでした。 B社サーバー内にc_01.swfというのを作り(http://www.zzz.com/c_01.swf)、1フレーム目にCGIを起動するコードを書きました。(以下) this.createEmptyMovieClip("page_mc1", 1); loadVariables("http://www.zzz.com/cgi-bin/c_01.cgi", page_mc1, "GET"); c_01.swfをA社のHTMLにあるSWFから _root.miniswf.loadMovie("http://www.zzz.com/c_01.swf"); というように読み込んでみましたが動きません。また、これは適当にやっているので見当違いかもしれませんが、A社のindex.htmlに <!--ムービーで使用されている URL--> <a href="http://www.zzz.com/"></a> <a href="http://www.zzz.com/cgi-bin/"></a> というタグを入れてみましたが動きませんでした。 B社で借りているレンタルサーバー(http://www.eee.com)にHTMLを入れてみると、http://www.zzz.com/cgi-bin/c_01.cgiは動くので不思議です。どなたか助けて下さい。 ※制作しているflashのバージョンはversion=8,0,0,0です。

  • CGIを表示させる方法

    まずこのページを見てください。 http://www.pololon.com/koby/support.php このページには↓のCGIが表示されています。 http://www.pololon.com/koby/cgi-bin/bbs/support/wforum.cgi 私もこのようにしたいのですが、どのようなタグを使えばよろしいのでしょうか?ソースを見たのですが、よくわかりませんでした。 どうかご教授おねがいします。 見当違いなタイトルをつけてすいません。 この場合、どのようなタイトルにすればよいのかわかりませんでした。

    • ベストアンサー
    • HTML
  • 動的URLから静的URLへのリダイレクト

    htaccessで動的URLを静的URLに301リダイレクトしたいのですが、うまくいきません。 どのように記述すればよいでしょうか? 静的URL同士のリダイレクトしか分からず、困っています。 よろしくお願いします。 http://example.com/yyy.cgi?cate=1&page=1 リダイレクト先 http://example.com/zzz.htm

  • cgiからcgiを呼び出す方法

    perlのcgi製作を始めて7日目の素人で恐縮ですが、教えてください。 タイトルのキーワードで検索し、いろいろ試しておりますがうまく動作しません。 ■試した例 exec("./cgi A.cgi") <!--#exec cgi="./cgi A.cgi"--> もともと単体で動作していたcgi Aに対して新たにcgi Bを作成し、 cgi Bからcgi Aを呼び出したいのですが、うまくいきません。  cgi A:アンケート回答フォームのようなもの  cgi B:認証フォーム(コードを入力してDB内のデータと一致したらcgi Aを呼び出したい) 自分のPCにApacheをインストールし、ローカルで実行しております。 cgi Bはcgi Aを呼び出す部分をコメントアウトすれば動作します。 どなたか良きアドバイスをよろしくお願いします。

    • ベストアンサー
    • CGI
  • ブログのURLとタイトルを取得したい

    ブログの記事のURLがたくさんあります。 url.txt内部に --- http://blog.jp/foo/4321.html http://site.jp/foo/bar/17167.html : ---- みたいに一行ずつ2000行ほどずらっとあるのですが、 1./がある場合はその最後の指定されたURLの/以下の部分を削除する。ない場合はそのまま。 2.削除した結果、同じURLがあったらそれを削除する 3.そのURLのタイトル(<title>タグの文字列)を取得して、URL+タイトルの形で出力する という3工程を踏んで、自分がよくいくブログのURLとブログ名がほしいです。 http://blog.jp/foo/4321.htmlならhttp://blog.jp/foo/ http://site.jp/foo/bar/17167.htmlならhttp://site.jp/foo/bar/になります。 ですがパースがうまくいかないのか同じサイトへの過剰アクセスを避けるためにsleep(1)を入れたせいかはわかりませんが、自分ではうまく成功しませんでした。 模範回答が知りたいです。このようなphpのコードをどなたかご教示ください。 どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • URL2万行をHTMLファイルで保存したい

    以下のように2万行のURLがありますが、 これを片っ端からHTMLファイルでダウンロードするうまい方法はありませんか。 http://example.com/page.jsp?page=1 http://example.com/page.jsp?page=2    :略 http://example.com/page.jsp?page=19999 http://example.com/page.jsp?page=20000 2万アドレスへのハイパーリンクが記述されたHTMLファイル(↓)を自作し、 <a href="http://example.com/page.jsp?page=1">1</a><br> <a href="http://example.com/page.jsp?page=2">2</a><br> 「波乗野郎」みたいなWeb徘徊保存ソフトを使えばいけそうな気がしますが もっとシンプルな方法はありませんか。

  • cgiからcgiを呼び出す方法2

    先日「cgiからcgiを呼び出す方法」で質問させていただいたのですが、 その後の状況にて新たな質問をさせていただきます。 【経緯】 もともと単体で動作していたcgi Aに対して新たにcgi Bを作成し、 cgi Bからcgi Aを呼び出したいのですが、うまくいきません。  cgi A:アンケート回答フォームのようなもの  cgi B:認証フォーム(コードを入力してDB内のデータと一致したらcgi Aを呼び出したい) 【その後の状況】 exec("perl A.cgi"); とすることで cgi A の画面を表示することが出来ました。 【新たな質問】 (1) cgi A の画面は表示されましたが title は cgi B のままです。  exec で cgi A が呼び出された時点で title は cgi A にならないのでしょうか? (2)いろいろなサイトに、呼び出し先に  "Content-Type: text/html; charset=Shift_JIS\n\n"  の記述があってはダメとの説明がありましたが、この記述がないと  cgi Aにてデータを入力し、送信ボタンを押すと  500 Internal Server Error(malformed header from script. Bad header~)  が表示されてしまいます。  Content-Type の記述があれば、cgi A の送信ボタンを押すことによって  入力したデータがDBに格納され、また、title も cgi A のタイトルが表示されます。 【cgi A が呼び出された時点の画面イメージ】  cgi B のタイトル  Content-Type: text/html; charset=Shift_JIS  cgi A のタイトル   cgi A の入力項目   cgi A の送信ボタン cgi A の送信ボタン(submit)を押すことによって、完全に cgi Aに制御が渡るということでしょうか? cgi A を呼び出した時点で完全に cgi A に制御を渡したいのですが、 どなたかアドバイスをお願いします。 cgi A の構成を変える必要があるようであれば、その当たりのアドバイスもお願いします。

    • ベストアンサー
    • CGI
  • ホームページで、掲示板CGIファイルをindex.htmlからアンカー

    ホームページで、掲示板CGIファイルをindex.htmlからアンカー ホームページで、掲示板CGIファイルをindex.htmlからアンカーで呼び出しているのですが、ファイルが 見つかりませんとWEBサーバーが返してきます。プロバイダーはぷららで、独自CGIサーバーに登録したところ、独自CGI用ディレクトリが、/home/アカウント名/ となっており、URLは、http://cgi19.plala.or.jp/アカウント名/ で登録完了となりました。 FFFTPで、掲示板CGI用フォルダをCGIサーバー内の、「/アカウント名/bbs1」として作成し、その下に 「/アカウント名/bbs1/aska.cgi」として、aska.cgiという、掲示板CGIファイルを設置しました。CGIファイルの属性も、755としました。 これをindex.html側で、<a href="http://cgi19.plala.or.jp/アカウント名/bbs1/aska.cgi">掲示板</a> と呼び出しているのですが、この<a>タグのURLの表記方法に何か間違いなどあるのでしょうか。それとも、CGIファイルの設置場所が間違っているのでしょうか。(/home/アカウント名/bbs1/aska.cgiに置いてもだめでした。) ぷららで独自CGIをお使いの方、ご指南いただければ幸いです。

    • ベストアンサー
    • CGI

専門家に質問してみよう