• ベストアンサー

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

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

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

  • ベストアンサー
  • 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