• ベストアンサー

WEBサーバーのapacheの設定について

WEBサーバーをたてていますがつまってしまい困っています。 困っているのは、apache2.2系のルートディレクトリでディレクトリを指定するのではなく、プログラムファイルを指定できないことです。 つまりweb上からあるディレクトリの中の複数のファイルに直接アクセスするのではなく、必ずあるCGIファイルを通して間接的にアクセスしたいのです。 apache2.2におけるその方法がわからなくて困っています。 本当に困っています。 誰かご教授下さい。

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

  • ベストアンサー
noname#98692
noname#98692
回答No.1

/var/www/test がドキュメントルートだとして、entrance.cgi にだけアクセスさせたい、他にアクセスしてきたら entrance.cgi に強制的に飛ばす(他ファイルにアクセスさせるのは entrance.cgi が行う場合) <Directory "/var/www/test">   ErrorDocument 403 /entrance.cgi   Order deny,allow   Deny from all </Directory> <Files "entrance.cgi">   Allow from all </Files> ------------------------- entrance.cgi で認証したばあいだけほかへの直接アクセスを許可したい(アクセスは Apache にまかせて、認証だけ entrance.cgi でやる) <Directory "/var/www/test">   SetEnvIf Cookie oreoreyou=password&nekoneko login_ok   ErrorDocument 403 /entrance.cgi   Order deny,allow   Deny from all   Allow from env=login_ok </Directory> <Files "entrance.cgi">   Allow from all </Files> ↓ entrance.cgi #!/usr/bin/perl use strict; use CGI::Simple; my %CONFIG = (   SCRIPT_URI => 'http://なんとかかんとか/entrance.cgi',   LOGIN_PASSWORD => 'nekoneko',   COOKIE_NAME => 'oreoreyou', ); my $q = CGI::Simple->new; my $password = $q->param('password'); if (defined $password) {   print $q->redirect(     $CONFIG{SCRIPT_URI},     -cookie => $q->cookie(       -name => $CONFIG{COOKIE_NAME},       -value => { password => $q->param('password') },       expires => '+10d',     )   );   return; } print $q->header; print << 'HTML'; <html> <head>   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   <title>Login</title> </head> <body> HTML my %cookies = $q->cookie($CONFIG{COOKIE_NAME}); if (%cookies and $cookies{password} eq $CONFIG{LOGIN_PASSWORD}){   print '<p>ok</p>'; } else {   print <<"HTML";   <form method="post" action="$CONFIG{SCRIPT_URI}">     <p><input type="password" name="password" value="" /><input type="submit" value="Login" /></p>   </form> HTML } print << 'HTML'; </body> </html> HTML 文字数増えすぎてもなのでハードコード過ぎますがご了承を。 インデント崩れるので全角スペースで埋めてます、コピペ時は注意で。 ちゃんと動くかは試してません。

keeeeeeeen
質問者

お礼

ありがとうございます!!!! この方法だとリダイレクトで飛ばしていると思うのですが、強制ではなく直接的に飛ばす方法がないのでしょうか? apache1.X系だとhttpd.confの<Directory…以下にActionを書く方法があると思うのですが、それに似たような方法で…。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#98692
noname#98692
回答No.4

先に上げた例だと、環境変数 REQUEST_URI で本来の呼び出し先を取得できます。 以下は予想での補足になりますが 直リンクさせたくないために CGI 経由するといった理由だと、直接ファイルの URL 叩いてアクセスできちゃうと意味がないので何らかのアクセス制限をする事になります。 ここで CGI から目的ファイルへリダイレクトしたときに、CGI から来ているとという証拠が Apache からわからないとまたアクセス制限がかかるのでどうしょうもないです。 なので、クッキーを焼くサンプルを付けたのですが・・・ ほかには CGI で直接ファイルを吐き出させるとか リファラを見るとか(リファラ切ってる人多いのでお勧めしません)

keeeeeeeen
質問者

補足

丁寧な説明ありがとうございます。 アクセスを一つに集めたいのは処理が後々楽だったり、セキュリティーだったり、SEOだったりと諸々考えています。 イメージとしてはpassでそれぞれのplファイルをrequireしてhtmlを吐き出す感じなんです。 で、提案頂いた方法ではSEO的にどうなのか少し不安であったので…。 すいません完全にこちらの説明不足で。。。

全文を見る
すると、全ての回答が全文表示されます。
noname#98692
noname#98692
回答No.3

直接的に の意味がちょっとわかりかねますが、リダイレクトではありません。 エラードキュメントとして表示するので、ブラウザのURL欄はかわりません。ユーザーは、entrance.cgi に飛ばされたことさえ気づかないはずです。 ちなみに、 ErrorDocument 403 http://...../entrance.cgi としてしまうと、リダイレクトになるので注意。

keeeeeeeen
質問者

お礼

すいません、こちらの説明不足で。 実はそのcgiで色々なプログラムに飛ばしたいと考えています。 たとえばパスにAがあればAというプログラムえ飛ばしBがあればBというプログラムえ飛ばすといったことをしたいと思っています。 なのでエラードキュメントとして処理をしたくなくて…。 すいません、説明不足で。

全文を見る
すると、全ての回答が全文表示されます。
noname#98692
noname#98692
回答No.2

-value => { password => $q->param('password') }, は -value => { password => $password }, の間違いでした、そのままでも動くとは思いますが。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Apacheの設定について

    OSはRedhatLinux7.1 Apache_1.3.26 php-4.2.3 mysql-3.23.52 を使っています。 WebサーバにApacheを使っており、 今は /usr/local/apache/htdocs の下に直接ファイルやディレクトリを置いてブラウザから見ています。 しかし、例えば、 /home/master/public_html の下に置いてあるファイルやディレクトリもブラウザから見えるようにするにはどのようにすればよいのですか? apacheの設定を変えればよいのかなと思うのですが、どこをどのように変えればよいのかわからず困っています。 アドバイスお願いします。

  • 以前書きこんだ者です。Apacheを自宅サーバーとして動かしています。

    以前書きこんだ者です。Apacheを自宅サーバーとして動かしています。Perlを含むCGIとSSI、それにHtmlをApacheで稼働させたいと思っているのですが、cgi-bin 以下のディレクトリでPerlとCGIを 動かすことはできたのですが、Htmlが動きません。ここに投稿させていただいたところ、CGI専用 ディレクトリでHtmlを動かそうとしているとご指摘されたので、cgi-binのひとつ上のディレクトリ でHtmlを動かそうと、httpd.confの中のServerRoot "C:/Program Files/Apache Software Foundation/Apache2.2"にしました。そしてエクスプローラで”localhost/htmlのファイル”を実行したところ、”Webページが見つかりません”とでてしまいました。何度いろいろなファイルで やっても同じエラーが出てしまいます。どうやらApache2.2のHtmlファイルを認識してくれない ようなのですが原因がわかりません。わかる方どうか教えてください。よろしくお願いします。

  • ApacheでCGI以外のデータも全部表示可能にしたい

    ローカルサーバーとしてApacheを使っています。 CGIの動作ディレクトリをルートディレクトリ以下(localhost以下)に設定していて、それでCGIは動くのですが他のファイルにアクセスできません。AddHandlerの行にファイルタイプを追加することで対処可能だと聞きましたが、1つずつ設定するのではなく一括で全部のファイルにアクセスできるようにはできませんでしょうか?WWWサーバーとして使うわけではないのでセキュリティの問題は無視してくださって結構です。 あともうひとつ質問です。通常のウェブサイトではアドレスを「hoge/」のようにスラッシュ(/)で終えた場合、そのディレクトリにindex.htmlがあればそれを表示するようになっています。僕が使っているApacheもそうだったのですが、上で設定したディレクトリ(localhost)以下へアクセスする際、スラッシュで終えると403エラーが出てしまいます。アドレスをきちんと「/index.html」まで打てばアクセスできるようになりますが、ちょっと面倒です。せっかく今までは省略できたのに(ルートディレクトリに置いたcgi-binディレクトリ以下をCGI動作ディレクトリに設定していて、それを今回変えたのです)。今までどおりにアドレスを省略できるようにするにはどう設定すればよいのでしょうか? どうか宜しくお願いします。

    • 締切済み
    • CGI
  • ApacheとPerlを別のサーバーに

    以下のような構成は可能でしょうか? 両方ともUNIXサーバーです。 Webサーバー(IP:192.168.0.1)と、 APLサーバー(IP:192.168.0.2)があり、Webサーバーには、Apacheを入れ、APLサーバーには、Perlを入れます。 Webサーバーは、HTML(CGI)を表示する画面機能のみ、APLサーバーにはCGI(Perl)のプログラム(この中でシェルをキックしたりもします)をおきます。 このようにWebサーバーでAPLサーバーのCGIを起動することは可能でしょうか? 会社の上司からの注文なんですが、APLサーバーにはapacheを入れることは不可。WebサーバーにCGI(Perl)を置くとAPLサーバーで起動するシェルをキックするプログラムや、計算結果などをいちいちリモート(rsh、rcpコマンドなど)で送らなければいけないので不可。とのことです。 このような構成が可能である場合の設定の仕方、また不可能であれば、それを可能にするための方法など、ご教授いただければと思います。 よろしくお願いいたします。

  • Apache/2.2.13 WebサーバーでCGIが動きません

    ご迷惑をおかけして、すいません。 何方か助けてください。お願いいたします。 OS Redhat Linux Fedora 11 バージョン 1.430 Webサーバー Apache バージョン 2.2.13 perl perl 5.10.0-73.fc11 httpd.confの記述 ------------------------- AddHandler cgi-script .cgi .pl ScriptAlias /cgi-bin/ "/home/www/cgi-bin/" <Directory /home/www/cgi-bin> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> ------------------------ デレクトリー /home/www/cgi-bin 属性(775 rwxrwxr-x) CGIファイル 属性(775 rwxrwxr-x) http://eiwa-up.com/cgi-bin/index.pl http://eiwa-up.com/cgi-bin/index.cgi 同じファイルで拡張子が.plは正常に動作します。 拡張子が.cgiだと動かない状態です。 お忙しい中申し訳ありませんが、何方か助けてください。 お願いいたします。 趣味で無料レンタルCGIをボランティアで提供していたのですが、 先月Linux Laser5が老朽化のためダウンしてしまい、新しくFedora11のwebサーバーを新インストールしているのですが私の知識では解決できそうにありません。無料レンタルCGIで使用していたサーバーのためたくさんの方にご迷惑おかけしている状態です。 なぜ.cgi拡張子だと動作しないのか?解決方法を教えていただけたら憂いしいのですが。よろしくお願いいたします。

  • Apacheの設定

    Apacheを使って、無料レンタルサーバーを運営しています。 現状、CGIやPHPを使える設定になっています。 Apacheの設定で、ディレクトリごとにsystem関数など、ssh等危険なプログラムを呼び出す文言を強制停止し、それが含まれている場合に500エラーを返す設定をしたいのですが、どういう設定をすれば、できますか? CGIやPHPの利用を不可にはしたくないです。 よろしくお願いします。

  • Apacheの設定の問題でしょうか?

    Windows XPにApacheをインストールしてサーバーにしています。 ブラウザからcgiファイルを呼び出す以下のメッセージが表示されます。 Windowsサーバーはパーミッションの設定は必要ない思っているのですが、どなたか何が原因かお分かりでしょうか?ご教授願います。 (呼び出しURL) http://hostname/~******/cgi-bin/******.cgi Forbidden You don't have permission to access /~*******/cgi-bin/*****.cgi on this server. -------------------------------------------------------------------------------- Apache/1.3.24 Server at localhost Port 80

    • 締切済み
    • CGI
  • Apacheでphpとcgiを使いたいのですが

    phpは問題なく使えましたが、cgiで問題があります。 今まではサーバーソフトにANHTTPDを使っていたのですが、phpを使う上で問題があったので汎用性のあるApacheに乗り換えました。するとphpはうまく動いた反面、cgiがうまく動作しなくなってしまいました。 ANHTTPDのときは、ローカルホスト以下のフォルダならどこであろうとcgiを含むすべてのファイルが使用できましたが、Apacheでは指定したフォルダ以下にcgiしか置けないみたいでした。そのフォルダ内にhtmlファイルなどを置くとアクセスできません。 この状態で使うとなると、cgiファイルだけその1箇所のフォルダ以下に集め、他のファイルを別のディレクトリに置かなくてはいけませんが、それでは1つのプログラムに必要なファイル類がバラけてしまうのでその方法は使いたくありません。 どうにかして1つのフォルダ以下でcgiとその他のファイルを扱えるように出来ませんでしょうか?また、僕が使っている今の方法では、cgiプログラムの1行目のパスを「C:/Perl/bin/perl」にしなくてはいけませんが、これもWebサーバー上にアップする際に書き換える手間がかかってしまいます。ANHTTPDの時は「/usr/bin/perl」「/usr/local/bin/perl」のような状態でも普通に使えました。この書き換えの手間を省く方法もありましたら情報いただければと思います。 以上です。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • Webサーバの設定で…

    全然知識がないのですが、ある企業で、Webサーバの管理をしている立場であり、HPを作成した部署からファイルを受け取り、 サーバにアップしているのですが、cgi-binフォルダ内の*.plファイルをCGIスクリプトと認識させて欲しいと言われました。 そこで、httpd.conf内の「AddHundler cgi-script .cgi」欄に「.pl」を追加入力しようとしたのですが、「AddHundler cgi-script .cgi」の前に 「#」がありコメントアウトされていました。しかし、実際のホームページでは、cgiプログラムのカウンタが正常に動いています。 これはどうしてでしょうか。他にcgiを実行可能な拡張子を設定するところがあるのでしょうか。 お分かりの方、ご教授をお願い致します。

  • apacheのディレクトリの設定を教えて下さい。

    apacheをつかって、Webサーバを立てました。 そのとき、Htmlのパス指定で、"/index.html"と指定したとき、ドキュメントルートの"index.html"が開かれると認識してます。 以下のファイルにてパス指定をしたとき   http://192.168.0.1/XXXX/index.html "/sub.html"と指定すると、   http://192.168.0.1/XXXX/sub.html に遷移するような指定方法があると聞きました。 (IISでは、できるそうです。) Apacheでは、このように設定することは可能でしょうか? 参考までに、今回使用しているApacheのバージョンは2.0.55です。 よろしくお願い致します。 ※知識不足のため、まわりくどい聞き方になってしまいすみませんでした。

排水ポンプ制御についての質問
このQ&Aのポイント
  • 排水ポンプの制御について教えて下さい。最近、ポンプ停止や始動継続の問題が発生しています。
  • 湧き水槽の浮玉3個のフロートスイッチが正常に働いていない可能性があります。
  • 制御盤側にはフロートなしスイッチ61F-G2と61F-G4があり、交互並列の制御を行っていると思われます。
回答を見る