• ベストアンサー
  • すぐに回答を!

apacheのScriptAliasの記述について

どなたか,ご教授いただければ幸いです。 WindowsXp Proでapacheを動かしています。次の設定で,cgiはうまく動作していました。 --- <IfModule alias_module> ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" </IfModule> <Directory \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jpg </Directory> --- これに, http://www.miloweb.net/win/server/apache.html を参考にして,各ユーザーフォルダでcgiが実行できるようにしようと,次のようにしました。 --- <IfModule alias_module> ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" ScriptAlias /cgi/ \"C:/www/users/*/cgi/\" </IfModule> <Directory \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jpg </Directory> <IfModule mod_userdir.c> UserDir \"C:/www/users/*/\" </IfModule> <Directory \"C:/www/users/*/cgi/\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jp </Directory> --- その結果, http://localhost/~user/ としてuserのホームページにアクセスできるようになったのですが, cgiについては, http://localhost/~user/cgi/・・・ としてもアクセスできません。どなたか原因をご教授いただけないでしょうか。 ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" ScriptAlias /cgi/ \"C:/www/users/*/cgi/\" の行を入れ替えると,\"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\"においてあるcgiが実行できなくなります。ScriptAliasは1行目しか有効でないようにも見えるのですが,上に書いた参考URLではできているようなので,戸惑っています。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数436
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.2
  • anmochi
  • ベストアンサー率65% (1332/2045)

 ええ? そんな馬鹿な、と思いつつ実際にWindows Server 2003にApache 2.2.14(nossl)とActivePerl5.10.1.1006を入れてみた。 私が書いた ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi/(.+) \"C:/www/users/$1/cgi/$2\" ではダメでした。すみません。 ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi/(.+) "C:/www/users/$1/cgi/$2" だとうまくいった。円マークが余計でした。これで普通に動きます。 動かしたCGIはこれ #!c:/Perl/bin/perl print "Content-Type: text/plain\r\n\r\nhello"; ~~~~~ > 一つ教えてください。 > ScriptAliasでなく,ScriptAliasMatch を使わなければならない > 理由はどのようなことでしょうか? ScriptAlias /cgi/ \"C:/www/users/*/cgi/\" がなぜいけないかだけど、これだとそもそも「*」の部分を誰がどう置き換えるのか分からない。Apacheがhttp://localhost/cgi/hello.cgiに対して、C:/www/users/anmochi/cgi/hello.cgiからC:/www/users/bob/cgi/hello.cgiから何から探しにいくのかという話。ひょっとしたら1.3ではうまく動いていたのかも知れないけど、2.2では動かない。 ~~~~  さて、余談にはなるけど、最終的にお友達なんかにこのサーバーのusersを間借りさせてあげるような場合、ScriptAliasMatchも実はあまりお勧めできない。ScriptAliasはそろそろお役ご免なのではないかと個人的には思います。 お勧めの構成は以下のような感じ。 UserDir "C:/users/" <Directory "C:/users/*"> AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Order Allow,Deny Allow from All </Directory> <Directory "C:/users/*/cgi"> AllowOverride None AddHandler cgi-script .cgi Options ExecCGI </Directory>  つまり、ScriptAliasやScriptAliasMatchで「スクリプト実行用の場所を指定する」のではなく、「特定の場所のみスクリプトの実行を許可する」方法。ScriptAliasはその場所の全てのファイルがスクリプト対象になって、除外したいファイル(gifやhtmlなど)をあえて除外しないといけないなど、設定をがちがちにしないとすぐセキュリティ上のリスクになる。そこで、C:/users/*/cgiの中に置いてかつ拡張子がcgiのファイルだけをCGIとして扱うようにする。もちろんAddHandlerをSetHandlerにする事でScriptAliasとほぼ同等の状態にできる。AddHandlerの拡張子を増やしても良いだろう。  ~hogehoge以下のURLへのマッピングはUserDirだけで済むし、後はDirectoryに対してこつこつアクセス制御を割り当てていくだけなので凄く楽チンだとは思わないかねチミィ。UserDirもAliasもAliasMatchも、UNIXで言うところのマウントと同じでディレクトリツリーの一部分を切り貼りするためのもので、この機能は必要最小限に使うのがうまく管理するコツだと私は思う。下手に増やすとループしたりアクセス制御の漏れが出たり大変です。あるサブツリー以下を誰かに委任してて、その数が増えるとなおさら大変です。  設定も構造もできるだけ単純化する方が良いと思いますです。今回のようなUserDir+SetHandlerとUserDir+ScriptAlias(Match)であれば、前者の方が単純っしょ。AliasMatchも多用するならmod_rewriteに替えた方がlogの管理まで考えたら良いはず。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

大変,丁寧に書いていただき,ありがとうございます。 円マークは気がついて削除して試したのですが,再度確認してみます。 ここまで書いていただいたのに,動かさないわけにはいかないので, ちょっとお時間かかるかもしれませんが,頑張ってみます。

関連するQ&A

  • CGIを開けない。。。

    apacheとphpを設定して動作確認したあとに、cgiも操作したいので、Active Perlというものをインストールしてみました。 phpは、http://localhost/で「C:/Program Files/Apache Software Foundation/Apache2.2/htdocs」のフォルダーを参照できるのですが、cgiを開くときには、どこのフォルダーに格納し、URLをどうすれば宜しいのでしょうか?(因みにcgi-binとhtdocsに格納し、http://localhost/***.cgiで試したのですが駄目でした。) Active Perlインストール後に変更した場所 ScriptAlias /cgi-bin/ "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/" <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin"> AddHandler cgi-script .cgi .pl なお、perlの設定には、こちらhttp://www.jisaba.net/xp/actpeal/04.htmのサイトを参考にしました。 環境はWindowsVistaです。 どなたか宜しくお願い致します。

    • ベストアンサー
    • Perl
  • ApacheのScriptAliasについて

    ScriptAlias /cgi-bin/ /var/www/cgi-bin/ ScriptAlias /cgi-bin/ /home/*/public_html/cgi-bin/ # # "/usr/lib/cgi-bin" could be changed to whatever your ScriptAliased # CGI directory exists, if you have that configured. # <Directory /var/www/cgi-bin/> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> <Directory /home/*/public_html/cgi-bin> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> 何がやりたいかと言うと複数箇所でcgi-binを作ってCGIをうごかせるようにしたいのですが、ScriptAliasは複数指定ってできるのでしょうか? できなければ何かうまい方法はないでしょうか?よろしくお願いしますm(_ _)m

  • Apacheで特定のファイルのみアクセス許可したい

    httpd.confの末尾に次の記述をしてapacheをリスタートしtop.htmlにアクセスしても 403エラーとなりアクセスできません。原因が分かる方よろしくお願いします。 <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/aaa"> Order deny,allow Deny from all SetEnvIf REFERER localhost referer_ok Allow from env=referer_ok </Directory> <Files "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/aaa/top.html"> Order allow,deny Allow from all </Files>

    • ベストアンサー
    • HTML

その他の回答 (1)

  • 回答No.1
  • anmochi
  • ベストアンサー率65% (1332/2045)

 質問者さんの参照URLはApache 1.3の話で、質問者さん自身はApache 2.2を使用されているように見受けられます。メジャーバージョンが2つも離れています。Windowsで言えばWindows NT 4.0の操作説明でWindows XPを操作するようなものです。 試しに ScriptAlias /cgi/ \"C:/www/users/*/cgi/\" を ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi/(.+) \"C:/www/users/$1/cgi/$2\" に変えてみてください。ただし、ユーザー名に!や#などの記号が含まれているとうまく動きません。  余計なアドバイスですが、もう少しディレクティブの意味をしっかり勉強された方が良いと思います。ネットで拾ってきたサンプルを切り張りして、動いたから良いや、ではトラブルがあったときに自分では何の対処もできないという状況になりかねません。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ScriptAlias /cgi-bin/ "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/" ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi/(.+) "C:/www/users/$1/cgi/$2" としてみましたがダメでした。 この表現はapacheのhpにも出ていました。 usersは,アルファベットのみです。 "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/" においたcgiは動作するんですが, "C:/www/users/cgi/"においたcgiは動作しません。 他に,お気づきの点があれば,教えていただけないでしょうか。

質問者からの補足

ご教授いただきありがとうございます。 バージョンが異なる件は,私のミスです。申し訳ありません。 >余計なアドバイスですが、もう少しディレクティブの意味をしっかり勉強された方が良いと思います。 まさにその通りでお恥ずかしい限りです。申し訳ありません。 一度は一通り読んだのですが,かなり前のことで忘れています。 一つ教えてください。 ScriptAliasでなく,ScriptAliasMatch を使わなければならない 理由はどのようなことでしょうか?

関連するQ&A

  • Apacheでcgiを動かす場合のファイルの場所は‥。

    いつもお世話になってます。  今、Apache2を導入して、サーバを構築しているのですが、cgiファイルをおく場所で困っています。  デフォルトでApacheをインストールすると、*:\Program Files\apach group\apach2\cgi-bin 配下に、cgiファイルをおくように設定することになりますよね。  そこにおけばcgiは動きましたが、出来れば、 任意の場所にcgiファイルをおいて動かしたいと思いました。 httpd.conf内の ScriptAlias /cgi-bin/ "E:/Program Files/Apache Group/Apache2/cgi-bin" や、 <Directory "E:/Program Files/Apache Group/Apache2/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all の部分を任意の場所に変えたりするのですが、それだとcgiファイルはただ単にテキストで表示されてしまうだけでした。  あきらめるしかないのでしょうか。  初歩的な質問かもしれませんが、FAQ等を探しても見つからなかったので質問させて頂きました。 どなたかご教授下さい。 よろしくお願い致します。

    • ベストアンサー
    • CGI
  • CGIの実行

    CGIを実行しようとしたら、下記のようなメッセージが出てしまいました。このDirectoryではダメって事なのでしょうか。 Options ExecCGI is off in this directory: C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/ruby.cgi CGIってCgi-Binの下って決まっているのでしょうか? どなたかご存知であれば教えてください。

    • 締切済み
    • CGI
  • 以前書きこんだ者です。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

    過去の質問やサイト検索して調べてみたのですが、どうしてもわからないので質問させていただきます。 Apache2.2.3 Tomcat5.5.17をmod_jk.soで連携させています。 Tomcat内のwebappsフォルダにJSPファイルを作成しています。 そのファイルをwww.xxx.com/xxx/yyy.jspというように表示させたくhttpd.confとserver.xmlに付け加えをしているのですが、上手くいきません。 [httpd.conf] DocumentRoot "/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/xxx" <Directory "/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/xxx"> AllowOverride FileInfo AuthConfig Limit Options Indexes MultiViews SymLinksifOwnerMatch Order allow,deny Allow from all </Directory> [server.xml] <Host name="www.zzz.com" debug="0" appBase="/webapps/xxx" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/Program Files/Apache Software Foundation/Tomcat 5.5/webapps" debug="0" reloadable="true"/> </Host> 上記をそれぞれ追加してみたのですが、どのようにしたらいいのでしょうか。 それとも根本的に間違っているのでしょうか。 また、Apache2.x/Tomcat5.xの連携方法について詳しく書いてある本などありましたら紹介して頂きたいです。 不備情報がありました仰ってください。 宜しくお願いします。

  • apacheによるCGIの使用について

    極めて初歩的な質問かも知れませんが、ご回答頂けると幸いです。 現在、私は玄箱(非HG)を使用して、apache1によるホームページを開いています。OSはMontaVista LinuxとDEBIANの二種類を使用しているのですが、MontaVistaLinuxの方で稼動しているapacheでは、正常にCGIが使えるのに対し、DEBIANの方では、MontaVistaLinuxと全く同じバージョンのapacheを使用し、CGIの設定も全く同じ状態であるにも関わらず、何故かCGIが使用できません。必ずInternalServerErrorとなってしまいます。何度もCGIの設定を見直したのですが、どうしてもDEBIANにインストールしたapacheではCGIが使えませんでした。DEBIANでapacheは使用できないのでしょうか? 現在のCGIに関する設定は以下のようになっています。 <IfModule mod_alias.c> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ # # "/usr/lib/cgi-bin" could be changed to whatever your ScriptAliased # CGI directory exists, if you have that configured. # <Directory /usr/lib/cgi-bin/> AllowOverride None Options None Order allow,deny Allow from all </Directory> </IfModule> また、AddHandler cgi-script .cgiの行はコメントアウトしています。 参考サイト:http://www5.plala.or.jp/vaio0630/apache/apache_cgi.htm DEBIANでapacheが使用できないとは思えないのですが、現実に使用できず、とても悔しいです。 もしDEBIANにインストールしたapacheでCGIを使える方がいましたら、どのような設定をすればCGIが動くのかを教えていただけると幸いです。 どうぞ宜しくお願い致します。

  • apacheのCGI設定

     pc9821にFreeBSD(98)をいれapache1.3を起動させています。cgiはlight.cgiというソフトをつかっています。なかなかcgiがうまくいきません。参考ページには public_html / index.html (トップページ) | +-- bbs / light.cgi [755] | admin.cgi [755] ・・・・(省略) +-- lock [777] / | +-- past [777] / 0001.cgi [666] とかかれていますが、実際に私のサーバーにはpublic_htmlというフォルダは存在していなくて /usr/local/www/cgi-binにbbsというフォルダをつくり あとは上のようにしています。またindex.htmlは/usr/local/www/dataのなかにいれて表示してWebサーバーとしてはたらいています。またapacheの/usr/local/etc/apacheのhttpd.confは 関係ありそうな行だけあげると ServerRoot "/usr/local" DocumentRoot "/usr/local/www/cgi-bin" <Directory "/usr/local/www/cgi-bin/bbs"> Options Indexes FollowSymLinks MultiViews <location "/cgi-bin/"> Options ExecCGI AllowOverride AuthConfig Limit Order allow ,deny Allow from all </Location> <IfModule mod_mime.c> TypesConfig /usr/local/etc/apache/mime.types ADDHandler cgi-script .cgi </IfModule> ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/" <Directory "/usr/local/www/cgi-bin/bbs"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> AddHandler cgi-script .cgi どこがおかしいのかおしえていただけないでしょうか?

    • ベストアンサー
    • CGI
  • Apache2.2 Aliasについて

    http://www.adminweb.jp/apache/docroot/index3.html 上のサイトを参考に、ドキュメントルート以外の場所へアクセスできるようにしたいんですが 参考サイト通りにやっても、うまく動きません。 httpd.confは <IfModule alias_module> Alias /labo/ "C:/Apache_Server/data/" <Directory "C:/Apache_Server/data"> Allow from all </Directory> ScriptAlias /cgi-bin/ "C:/Apache_Server/Apahce2.2/cgi-bin/" </IfModule> このように書いています。 (ServerRoot は "C:/Apache_Server/Apahce2.2" DocumentRoot は "C:/Apache_Server/Apahce2.2/htdocs"です) C:\Apache_Server\data に index.htmlを置き http://localhost/labo/index.html へアクセスしても Not Found The requested URL /labo/index.html was not found on this server. と表示されます。 環境はApache2.2、windows7です。 どこか間違っているところがあるのでしょうか? よろしくお願いいたします。

  • apacheのDirectory指示子でわからない

    Windows2000pro,apache2.0.55です。 Directory指示子の使い方がいまいちわかりません。 あるディレクトリ(たとえばtest)にForceType指示子で強制的にMIMEを設定したいのですが、 <Directory "C:Program Files/Apache Group/Apache2/htdocs/test"> ForceType image/gif </Directory> と直接絶対パスで指定するとうまくいくのですが、 <Directory /htdocs/test> ForceType image/gif </Directory> と/からの相対パスにするとうまくいかないのです。 手元の解説書によると、Directory指示子での/とはServerRoot指示子で指定されたディレクトリを指す、とあります。 ServerRoot指示子の値は "C:Program Files/Apache Group/Apache2" となっています。 ということは <Directory /htdocs/test> という指定で <Directory "C:Program Files/Apache Group/Apache2/htdocs/test"> と同じ意味になるはずなのですが、そうはなっていないのです。 どこがまずいのでしょうか? よろしくお願いいたします。

  • windowsのapacheのhttpd.conf

    windowsのapacheのhttpd.confの書き方についての質問です。 通常windows(私は7です)にapacheをインストールすると httpd.confには DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs" と書かれていますが、前述の質問の回答で LINUXがOSの場合、スラッシュ→「?」は有効だが windowsがOSの場合バックスラッシュ→「\」に置き換えなければならない、 と私は解釈したのですが、 では、デフォルトの DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs" でApacheが正常に稼働しているようなのですが、 これって/を使ってますよね? これって、windowsがOSの場合の\のルールに反しているのに、 localhostと入力すると、it worksのhtmlが参照されるのは何故なんでしょうか? そして これを"C:\www"とCドライブの直下に置くことが出来るみたいなんですが、 ドキュメントルートの変更で\を使っても私の環境下では DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs" と同じで、この中のhtmlは読んでしまうのは何故なんでしょうか? 長文、駄文、失礼いたしました。 何分超初心者の身なので、詳しい方は「?何いってやがんだ…質問の趣旨がわからん」 と思われるかもしれませんが、拙い表現になってしまうのはお許しください。

  • phpにapacheを組み込む方法

    php初心者です。 「はじめてのphpプログラミング」という本を買ってapacheをphpに組み込もうとしているのですがわからないところがあったのでここで質問させてください。 まずapache2.2.9-win32-x86-nosslr2.mslをインストールし、 ちゃんとhttp://localhost/にIt works!と出たのですが このあと C:\Program Files\Apache Group\Apache2\conf\httpd.confをテキストエディタで開き、 AddType application/x-httpd-php .php LoadModule php5_module "c:/php5/php5apache2_2.dll PHPIniDir "c:/php5/ Alias /hajimete_php5/ "C:/hajimete_php5/" <Directory "C:/hajimete_php5"> Options Indexes FollowSymLinks AllowOverride Options Order allow,deny Allow from all DirectoryIndex index.php index.html </Directory> <Directory "C:/hajimete_php5/SQLiteManager"> php_value error_reporting 6143 </Directory> というのを追記し保存しなさいとあるのですが、 まずProgram FilesにApache Groupというフォルダがありません。 Apache Software Foundationというフォルダはあるのですが・・・・ そこの中のconfのhttpd.confを変えればいいのかなと思って 変えて上書き保存してみようとしても 「ファイルC¥:~httpd.confを作成できません。 パスおよびファイル名が正しいかどうか確認してください。」 とでてしまいます。 どうしたらいいのでしょうか? わかる方いましたらアドバイスお願いたします。 これがだめならphpが使えるレンタルサーバーを借りてそこでやろうかなと考えています。

    • ベストアンサー
    • PHP

専門家に質問してみよう