• ベストアンサー

Apache2.0で「#exec」コマンドを許可したい

アクセスありがとうございます。 先日の私の質問 http://oshiete1.goo.ne.jp/kotaeru.php3?q=447488 は無事解決いたしました。 どのような原因だったのか知りたい方はその旨を、お書きください。 また今回も、よろしくお願いします。 CGIで簡単なアクセスカウンターを作成したのですが動作しません。 「index.html」の中に<!--#exec cmd="./counter.pl"-->のコマンドを記述しました。 「counter.pl」の内容は「counter.dat」にインクリメント後その結果を表示するというものです。 「Linux」のコマンドラインからの「counter.pl」のテストでは「syntax OK」でした。 またコマンドラインから「counter.pl」を実行すると実行回数分の数字が表示されます。 また「AddType text/x-server-parsed-html .html 」という内容の「.htaccess」ファイルを同じディレクトリ内に作成しました。 各ファイルのパーミッションは「index.html」と「.htaccess」が「rw-r--r--」で「counter.pl」が「rwxr-xr-x」で「counter.dat」が「rw-rw-rw-」です。 本来ならば、これでアクセスカウンターが作動するはずなのですが、なぜか動きません。 おそらく「httpd.conf」の内容を書き換えることにより動作するようになるのだと信じ、いろいろ変更してみましたが、うまくいかないので結局、今はデフォルト設定に戻しました。 また、このスクリプトは学校のサーバに置いた場合は問題なく動作します。 そこで学校の「httpd.conf」を、そのまま自宅サーバに適用したりもしましたが「Apache」のバージョンの違いか、またはその他の原因か「httpd」が起動しませんでした。 しかし、このファイル以外に原因は考えられません。 おそらくアクセスカウンターを動かすには「httpd.conf」の色々な箇所を変更する必要があるのだと思っているのですが、いったい、どこと、どこと、どこと、どこを、どのように書き換えればいいのですか。

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

  • ベストアンサー
  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.2

こんばんは、夜の個別指導係2です。 RedHat8+Apache2でSSIを動かしてみました。 astronautさんが書かれているように、httpd.confのコメントを読みながら修正したら あっけなくアクセスカウンタが動きました。 .htaccessは使っていません。 httpd.confで変更したところは以下のところ。 (1) <Directory /home/*/public_html>   .....   Options ExecCGI Includes   ..... </Directory> (2) AddDefaultCharset Off (3) AddHandler cgi-script .cgi (4) AddOutputFilter INCLUDES .html そして /home/hogehoge/public_htmlのindex.htmlの中は <html> <body>  あなたは <!--#exec cmd="./counter.pl"--> 番目のお客様です。  最終更新日:<!--#echo var="LAST_MODIFIED"--> </body> </html> こんな感じでカウンタが実行できました。 ご参考まで。 ----------------------------------------------------------- counter.pl #!/usr/bin/perl $datafile = "counter.dat"; open(DATA, "$datafile"); $number = <DATA>; close(DATA); $number = $number + 1; open(DATA, ">$datafile"); print DATA $number; close(DATA); print $number;

zyousuke
質問者

お礼

夜の個別指導ありがとうございます。 ちょこっとhttpd.confのコメントを読みながら、ちょこっと編集して、あっけなくアクセスカウンタを動かしてしまわれるとは。 まさか!!皆さん米国の方ですか!?(笑) 私も、その読解力が欲しい!! さて結果から、ご報告しますと残念ながら、まだ成功していません。 お教えいただいた設定項目(1)(2)(3)(4)について (1)は各ユーザのホームディレクトリ下の「public_html」ディレクトリ内で「CGI」と「SSI」を許可する設定。 (2)はWebサーバにアクセスしたときの文字コードをクライアント側に合わせる設定。 (3)はCGIスクリプトの拡張子を「.cgi」に統一する設定。 (4)は「SSI」を埋め込むファイルの拡張子を「.html」に統一する設定。 で正解でしょうか。 (1)(2)(3)(4)全てを適用しましたがスクリプトは動きませんでした。 「あなたは 番目のお客様です。」となってしまいます。 またこの設定により「.shtml」の拡張子を持つファイルで「SSI」が利用できなくなりました。 しかし、これについては AddOutputFilter INCLUDES .html .shtml という風に設定項目に「.shtml」を追加したら回復しました。 またAddDefaultCharset Offの項目については #AddDefaultCharset Offのようにコメントアウトせずに「Off」と設定すると、どのような違いがあるのでしょうか。 また今までは<Directory /home/*/public_html>項目のOptionsにIncludesNoExecが設定されていたので「#exec」コマンドが使えないと思っていたのですが今回「IncludesNoExec」を「Includes」に書き換えたにもかかわらず、うまくいかないと言うことは、この他にもさらに何らかの原因があるということなのでしょうか。 個人的には「#exec」コマンドの引数「cmd」や「cgi」に、それぞれ別々の許可設定がなされているのではとも予想しているのですが、さすがにそこまで細かい設定項目はないのでしょうか。 うーん、しかしCGIはソースを完璧に記述したとしてもサーバの設定の影響などにより実行できないことが多々あるのでC言語実習のころよりもイライラすることが多くなったような気がします。 お手数ですが他にも何か解決策がありましたら、どうぞ教えてください。

その他の回答 (4)

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.5

> これからもジャンジャン質問に参りますのでよろしくお願いします。 いいえ、ようやく懲りました。遅いってか (^^; 最後に、参考URLを差し上げておきます。 # だから「教えてgoo」だってば!!!! → 自分

参考URL:
http://www.google.com/search?q=%8BZ%8Fp%8Cn%83%81%81%5B%83%8A%83%93%83O%83%8A%83X%83g&btnG=%8C%9F%8D%F5&lr=lang_ja
zyousuke
質問者

お礼

参考URLを、どうもありがとうございます。 今後の参考にさせていただきます。 しかし「ようやく懲りました」ってもう回答していただけないということですか。 それは誠に残念です。 astronautさん、あなたの気持ちが変わりますことを心からお祈りしています。

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.4

すでに書いた方法でこちらではうまくいっていますから,原因は他にあるような気がしますが,いまだに正確にエラーメッセージを書くという基本的なことすら実践していただけないので,こちらで再現性を確認することができません. 現状を「簡潔に」「要領良く」「もらさず」お伝えいただくまでは,これ以上詳しく回答することは,他のもっと優しい方におまかせします. # つーか,どうやってあれ以上詳しく書けっちゅうんじゃ… お勉強ということですが,今のやりかたで身についている実感が ありますか? 「天は自ずから助くる者を助く」 という言葉を差し上げておきます. # だーかーらー,「教えてgoo」なんだってば. -> 自分

zyousuke
質問者

お礼

ご返信ありがとうございます。 うーん一応エラーメッセージらしきものは全て記述したと思うのですが。 「エラーメッセージが何も表示されない」と記述することも回答をいただく手がかりになりますでしょうか。 一応コンピュータについての質問を投稿する前には回答をいただくために何と、何と、何について書かなくてはいけないか頭の中でシミュレーションするのですが、あれも、これも、という風に書いていくうちに文章が長くなってしまい、次第に頭の中が真っ白になっていきます。そこで頭が爆発する前に、ひとまず書き込んでしまい、後は補足要求があったときに、その都度、補足するというのが僕の方針です。 そのため簡単な問題であっても解決に数日かかるということもしばしばありますが自分の起てたスレが、だんだん大きくなっていくことに快感を覚えたりもしています(くだらねー)。 「どうやってあれ以上詳しく書けっちゅうんじゃ」というご指摘について僕が何について詳しくお教えして欲しかったかといいますと「Apache2.0」においての「.htaccess」の書き方です。 前の回答文を拝見しますと「Apache1.x」とは書き方が違うらしく 「AddType text/x-server-parsed-html .html 」 は「Apache1.x」のものだそうで「Apache2.0」では「.htaccess」に何と記述すればよいのか教えていただきたいということです。 また「今のやりかたで身についている実感がありますか」とのことですが、もちろんあります。 「教えてgoo」が無ければ私は今UNIXについて、これほどの知識を持っていないでしょう。 「教えてgoo」は私の生活の一部です!! 回答者の皆様いつもありがとうございます。 ところで実は問題が解決しました。 原因は何だったのかといいますと実はサーバの問題でもスクリプトの問題でもなく単なるパーミッション設定の問題でした。 このスクリプトの置いてあるディレクトリのパーミッションを、ふと見てみましたら「rwxrwxr-x」となっていました。 おそらく「755」とするつもりが誤って「775」とタイプしてしまったのでしょう。 これを修正したら見事にカウンターが動きました。 どうもお騒がせしました。 しかしパーミッション設定を「775」から「755」という風に厳しい設定にして動き出すというのも不思議ですね。 「7」は何でもOKということではないのですね。 「だーかーらー,「教えてgoo」なんだってば」←そうです、ここは教えて君たちの楽園「教えてgoo」です。 これからもジャンジャン質問に参りますのでよろしくお願いします。

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.3

あーそうか. > いったい、どこと、どこと、どこと、どこを、どのように書き換えればいい > のですか。 という聞き方なのでした.まあ,ここは「教えてgoo」だしなあ… ではそのように. (解) httpd.confの中のSSIを許可したいディレクトリの設定で, Options ディレクティブに Includes を追加する. .htaccessの設定は不要 (別解) .htaccess のOptions ディレクティブに Includes を追加する. この場合, httpd.conf で,AllowOverride ディレクティブに Optionsを指定することが必要. (エラーの原因) > このメッセージより何か原因が思い当たりましたら、是非教えてください。 .htaccess に apache-1.x 用の間違った設定が残っている. # 勉強でやっているようだから,そのつもりで,問題にあたったときの # 勘所がわかるようになるような回答をしているつもりなんだけどねぇ

zyousuke
質問者

お礼

ご返信ありがとうございます。 そうです。ここは「教えてgoo」です。 私たちはインターネットという最強のメディアを用いて全国のパワーユーザから回答をいただくことが出来るのです。 この最強のサービスを利用しない手はないでしょう!! とはいうものの同じ方から回答をいただくことも多く、意外にも世界は狭いと感じる今日この頃です。 さて「httpd.conf」ファイルの <Directory /home/*/public_html>項目にて Options Includesを追加したのですがスクリプトは動作しませんでした。 (別解)については、とても興味があります。 というか、なかなかうまくいかないので、これにかけてみたいです。 よろしければ「.htaccess」の記述内容や「httpd.conf」の「AllowOverride」ディレクティブにての設定内容を詳しく教えていただけませんか。 Apacheについてはバージョン1.xに乗り換えるのも一つの手でしょうか。 いや、それはそれで、また混乱が生じそうで怖いですね。 #はい、ただ今CGIを勉強中です。でも今はかなりイライラモードに突入しています。このままでは明日にも爆発して借家の壁を蹴り壊してしまいそうです。ってこれは大げさですね。

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.1

>また「AddType text/x-server-parsed-html .html >」という内容の「.htaccess」ファイルを同じディレクトリ内に作成しました。 この情報は何に基づくのでしょう? どのバージョンのapacheの設定方法なのか確認していますか? apache-2.0 は 1.3 系列とは全然違うと思ったほうがいいです。 で、答えですが、http.conf を読めばとても親切に書いてあります。 該当部分を転載します。 # Filters allow you to process content before it is sent to the client. # # To parse .shtml files for server-side includes (SSI): # (You will also need to add "Includes" to the "Options" directive.) # AddOutputFilter INCLUDES .shtml このコメントに書いてあるように .htaccess を書けば良いです。 拡張子 html で SSI を動かしたければ、ここの shtml を html にすればよし。

zyousuke
質問者

お礼

ご返信ありがとうございます。 「.htaccess」ファイルは教科書の、動かなかったときの対処方法として載っていたものを丸写ししたものです。 このファイルを置くことにより学校のサーバではCGIが動くようになりました。 また「http.confを読めばとても親切に書いてあります」とのことですが英文なので、どれほど親切なのか見当も付きません(汗)。 でも、がんばって訳してみました。 #クライアントに送る前に処理内容をフィルタリングします。 #「shtml」ファイルは「SSI」をparseします。 #(また「Options」に「Includes」を追加する必要があります。) このような感じでしょうか。 うーん、さっぱり分からん(高校の頃の英語は赤点三昧でしたから(汗)。 ひとまず、お教えいただいたとおり AddOutputFilter INCLUDES .shtml ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ AddOutputFilter INCLUDES .html と変更しブラウザから「index.html」にアクセスしてみると奇妙な現象が起こりました。 zipファイル等のバイナリファイルをダウンロードするときのような「ファイルのダウンロード」ダイアログボックスが開いて「開く」か「保存」か問い合わせてきます。 また「□この種類のファイルであれば常に警告する」のチェックボックスなどもあり、何か危険なファイルをダウンロードする前の警告のような感じのダイアログボックスでした。 しかしアクセスしたファイルは、ただの「html」ファイルですので「□この種類のファイルであれば常に警告する」のチェックをはずし、「開く」ボタンを押しました。 また、この後「ファイルを開けません」等のメッセージとともに、どのプログラムで開くか聞かれます。 しかし「html」ファイルは「インターネットエクスプローラ」で開くように関連づけされているのですから自動的にアプリケーションが起動しなければおかしいですよね。 しょうがないので一覧からブラウザを選んで「OK」ボタンを押すと、やっと「index.html」が開きます(しかもなぜか新しいウィンドウで開きます)。 さて、開いた「index.html」を確認したのですが残念ながらアクセスカウンターは動作しませんでした。 あなたは[an error occurred while processing this directive]番目のお客様です。 と本来ならば数字が表示されるエリアに上記のような英文が表示されてしまいました。 「処理中に何らかのエラーが発生しました。」 というような内容っぽいですが、このメッセージより何か原因が思い当たりましたら、是非教えてください。

関連するQ&A

  • apacheでhttpsによって外部からアクセスさせたい

    windowsserver2008でapache2.2.6を動かしてます。 httpd.confとhttpd-ssl.confを編集して、 LAN内から http://server/index.html https://server/cgi-bin/printenv.pl でアクセスできます。 外部から http://domain.jp/index.html でアクセスできるのですが、 https://domain.jp/cgi-bin/printenv.pl だと404エラーが表示されます。 サーバー上でnetstat -aすると、443はLISTENになってます。 外部からhttpsによるアクセスを可能にするために確認すべきこと、 あるいは、アクセスできる方法をご存じの方教えてください。

  • RewriteRule有効について(Apache設定)

    Apache2をWindows2kにインストールし運用しています。 RewriteRuleを行うが有効になりません。 httpd.confと.htaccessは、以下のように記述しています。 .htaccessは、レンタルサーバーに転送しテストすると正常に動作します。 と言うことは、ローカルサーバーの環境設定がまずいと言うことになるかと思うのですがどうしても分かりません。 ご教授の程、宜しくお願いします。 -----(httpd.conf)----- Options All AllowOverride All LoadModule rewrite_module modules/mod_rewrite.so -----(httpd.conf)----- -----(.htaccess)----- RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^info.html+ info.php RewriteRule ^k/index.html$ k/index.php RewriteRule ^k/([0-9A-Za-z]+)/$ k/index.php?id=$1 -----(.htaccess)-----

  • Apacheでのベーシック認証

    Apacheでのwebサーバのベーシック認証を勉強しております。.htaccessにてvar/www/html/jikken/index.html をhttpsでしかアクセスできなくし、ベーシック認証にも成功いたしました。ですがvar/www/html/index.htmlには同じ設定をしてもhttpでアクセスできてしまいます。httpsの場合はきちんとベーシック認証をしてくれるのですがhttpの場合はアクセスできてしまうとともにベーシック認証もしません。 .htaccessの設定は SSLRequireSSL AuthUserFile /etc/httpd/conf/.htpasswd AuthGroupFile /dev/null AuthName "please enter your name" AuthType Basic require user hoge としてあり、httpd.confでは Directory "/var/www/html"> 以下の変更点はAllowOverride Allです。 OSはLinux Fedora Core 4です。 まとめるとhttp://hoge.jp/jikkenはアクセスできなくて(httpsで無ければアクセスできない+ベーシック認証) 同じ設定でhttp://hoge.jpではアクセス出来てしまうということです。(httpsのときは正常に作動する) ご教授よろしくお願いいたします。

  • apache2にアクセスできない!!!

    apache2をインストールしてhttpd.confの基本的な設定を行ったところ、デフォルトのindex.htmlがテスト用に作ったテキストだけのものならアクセスできるのですが、テキスト以外のファイルを表示させようとすると、アクセスできなくなります。 httpd.confの設定の基本的なことなのかもしれないですが、教えてください。よろしくお願いします。

  • apacheのコマンドプロンプトからのインストールについて

    初めてのご質問をさせていただきます。 OSがWindows2003サーバのマシンに、Apache + OpenSSLで、サーバ証明書を発行できるApacheサーバを構築しておりまして、OpenSSLの設定は順調にできたのですが、Apacheをコマンドプロンプトより 「apache -k install」 と入力してインストールしようとしたところ、 「'apache'は、内部コマンドまたは外部コマンド、  操作可能なプログラムまたはバッチファイルとして認識されていません。」 と表示されてしまい、インストールできません。 httpd.confなどの設定ファイルは修正し、環境変数をいろいろ変えながら試しているのですが、うまくインストールできません。 どなたか原因が分かる方がおられましたら、ご回答のほどよろしくお願いします。

  • AWStatsにBasic認証

    AWStatsにBasic認証 サーバはCentOS5.4を使用しております。 先日、外部に公開しているサーバにAWStatsを設置しました。 これで外からもアクセスログを見ることができるようになったのですが、AWStatsのURLが比較的容易に推測されやすいことから、Basic認証を設置してIDとパスワードを入力しないとアクセスログを見れないようにしたいと思い、現在作業をしております。 が、どうもBasic認証の設置がうまくいっていないみたいで、一通り作業を終えてブラウザから http://サーバのFQDN/awstats/awstats.pl でアクセスしたところ、IDやパスワードを聞かれず普通に見れてしまいます。 そこでお伺いしたいのですが、.htaccessはどこに設置したらよいのでしょうか? 現在行った作業としては、 /var/www/awstats/.htaccess に.htaccessを設置しており、中身は AuthType Basic AuthName "AWStats Login" AuthUserFile /etc/httpd/conf/passwd.dat require valid-user としました。また、 # htpasswd -c /etc/httpd/conf/passwd.dat ユーザ名 として、ユーザ名とパスワードが書かれたpasswd.datというファイルを作成しました。 お分かりになる方いらっしゃいましたら、ご教授のほどお願い致します。

  • ApacheでSorryサーバを作りたい

    どんなURIを指定しても用意したページ(sorry.html)を返すSorryサーバを作りたいのです が上手く出来ません。 例えば、 http://192.168.1.5/aaa.html http://192.168.1.5/cgi-bin/aaa.cgi http://192.168.1.5/aaa/aaa.html のアクセスはすべて、 http://192.168.1.5/sorry.html の内容をクライアントに返したいです。リダイレクトで再要求でも良いです。 【httpd.conf】 1.Redirect permanent /foo http://192.168.1.5/sorry.html 2.ErrorDocument 404 http://192.168.1.5/sorry.html このような設定を入れてみましたが、うまくいっていません。 HTTP 404 -ファイル未検出 となります。 ともかく、httpd.confでSorryサーバの作り方を教えて頂けないでしょうか?

  • [Apache] サブディレクトリに.htaccessをおいた場合

    Apacheの.htaccessについての質問です。 webにて可能な限り検索してみたのですが、該当する記事がありませんでした。 よろしくお願いします。 【環境】  ・windows xp sp2  ・xampp(apache 2) 【httpd.confの設定】 DocumentRoot "J:\foo" <Directory "J:\foo"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> ※)Jドライブは外付けHDDです。 【現象】 1.DocumentRootの「J:\foo」に.htaccessを設置した場合   1)http://localhost/でアクセス     →機能します   2)http://localhost/ver/でアクセス     →機能します   ※)DocumentRootに.htaccessを設置した場合、通常の動作になる。     (サブディレクトリにもDocumentRootに設置した.htaccessの設定が有効になる) 2.「J:\foo\ver」に.htaccessを設置した場合(DocumentRootの.htaccessは除去)   1)http://localhost/ver/でアクセス     →機能しません 「2」を機能させたいのですが、どのような設定が必要なのでしょうか。 尚、念の為.htaccessの内容を以下に記します。 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.html [L,QSA] この.htaccessについてはレンタルサーバ上で動作確認済みである為、おそらくはhttpd.confの設定かと考えています。 または外部HDDにDocumentRootを設定しているのが問題かと・・・。 説明不足な点がございましたらご指摘頂けると幸いです。 以上、どうぞよろしくお願い致します。

  • Apach2でSSIコマンドが実行出来ないのですが教えてください

    環境は、自宅サーバ、WindouwsXP、Apache/2.0.53 (Win32) PHP/4.3.10 mod_jk2/2.0.2です。 [httpd.conf SSI関連設定] AddType application/x-server-parsed .shtml AddHandler server-parsed .shtml AddHandler cgi-script .cgi .pl .bat [SHTMLファイル] <HTML><HEAD><TITLE>counttest</TITLE></HEAD><BODY> あなたは<!--#exec cmd="countlog/count.pl" -->人目のお客様です。 </BODY></HTML> [count.plファイル] #!c:/perl/bin/perl $file="C:/ProgramFiles/Apachegroup/Apache2/htdocs /nandemokan/countlog/numfile"; open(FILE, "<$file"); #人数ファイルを読んで 以下省略 http://localhost/nandemokan/index.shtml [SHTML実行結果] あなたは人目のお客様です。 http://localhost/nandemokan/countlog/count.pl [直接SSIを指定した結果] Internal Server Error なお、コマンドプロンプトからcount.plを実行すると 正常にカウンタが出力されます。 ANHTTPDではうまくいったのですが、Apache2で出来なくて困っています。よろしくお願いします。

    • ベストアンサー
    • CGI
  • Apache2.4のダウンロードについて

    Windows 8、PHP5.5.6 、関係ないかもしれませんがTomcat 6.0です。 ダウンロードしたアパッチのバージョンは2.4ですが、 IKURAさんのページ(http://www.adminweb.jp/apache/install/index2.html )を参考にしようと思ってましたが、 バージョンが違うので、サーバルートなどは http://www.okomeda.net/?httpd.conf%E3%81%AE%E8%A8%AD%E5%AE%9A%E9%9B%86 のページを参考にさせていただきました。 そして再びIKURAさんのページに戻り、 Apacheの起動を行おうとているところでつまずいています。 http://www.adminweb.jp/apache/install/index3.html コマンドプロンプトで、 cd Apacheのあるディレクトリ(C:\Program Files\Apache\Apache24)に移動、そしてhttpd と入れてみると、 'httpd' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出てしまっています。これってJavaやPHPにもある環境変数がおかしいパターンでしょうか?