どなたか,ご教授いただければ幸いです。
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ではできているようなので,戸惑っています。
No.2ベストアンサー
- 回答日時:
ええ? そんな馬鹿な、と思いつつ実際に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の管理まで考えたら良いはず。
大変,丁寧に書いていただき,ありがとうございます。
円マークは気がついて削除して試したのですが,再度確認してみます。
ここまで書いていただいたのに,動かさないわけにはいかないので,
ちょっとお時間かかるかもしれませんが,頑張ってみます。
No.1
- 回答日時:
質問者さんの参照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でなく,ScriptAliasMatch を使わなければならない
理由はどのようなことでしょうか?
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は動作しません。
他に,お気づきの点があれば,教えていただけないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL Mac です。ローカルホストの phpMyAdmin にアクセスできません。 1 2023/06/06 17:14
- CGI htmlからcgiを自動的に起動させたい 1 2023/02/21 19:39
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(プログラミング・Web制作) robots.txtが”allow”のサイトを探しています 2 2022/10/09 13:07
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- その他(ネットショッピング・通販・ECサイト) ネットサイトの中国で洋服を購入しました。昨日の返信です 4からの追跡番号):https://toi. 1 2022/12/28 09:47
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- CGI 古ーくからフリーのtree.cgi掲示板を利用させてもらって来ましたが、最新でなにか復活できないか? 2 2023/04/07 10:43
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ノートパソコンのCPU選択
-
コピロットというAIの機能をす...
-
ノートパソコンからgamebarとい...
-
onenoteというものを削除したの...
-
ノートパソコンを友達に譲りま...
-
ウインドウズ10のアプリという...
-
モバイルノートPC購入相談
-
マイクロソフトの検索について...
-
ノートパソコンのサインインの...
-
レノボのハイエンドノートPCは...
-
Windows1124H2が非対応のpcにWi...
-
ノートパソコンの購入でご質問...
-
関電グループ PCNEXTでノ-卜PC...
-
パソコン遠隔操作で以前、Micro...
-
大学で使うパソコンについてで...
-
ケーズデンキ楽天市場店で15万...
-
ノートパソコンで漫画アプリは...
-
ノートパソコン、YouTubeで1080...
-
マックブックとアイパッドどっ...
-
ノートPCの液晶パネルを現状のW...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カタカナを英語やフランス語に...
-
KENT WEB(昨日の続きです)
-
iframeの中から、親frameのURL...
-
perl 矢印演算子 -> の使い方
-
httpd で SetEnv が使えない
-
cgiからcgiを呼び出す方法
-
DiaryCGI nicky! について 新し...
-
<a href="URL" utn>○○</a> で...
-
東京ドームから幕張メッセまで...
-
検索エンジンの名前
-
NANAの革ジャン!!!
-
歌詞画ってどうやって作るの?
-
インテル製インタフェース82...
-
リビングのソファー(皮)のキ...
-
携帯サイトのページ移動
-
CGIと permissionの問題
-
Locationの部分をいじる
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
URLに~/cgi-bin/~を隠す方法
おすすめ情報