- ベストアンサー
Apacheで特定の拡張子を持つファイルへのリクエストをcgiに送る方法
- Apacheの設定ファイルで拡張子と実行ファイルを関連付けて、特定の拡張子を持つファイルへのリクエストをcgiに送ることができます。
- 設定ファイルにAddHandlerとActionディレクティブを使用し、拡張子.xmlのファイルがリクエストされた場合にD:/www/proxytest_xml/cgi-bin/index.cgiが実行されるように設定します。
- ただし、設定に関連するディレクトリのパーミッションやAllowOverrideディレクティブなどを正しく設定する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Action ディレクティブの第2引数はファイル名ではなく、URLです。 起動したいCGIが http://127.0.0.1/proxytest_xml/cgi-bin/index.cgi なら Action text/xml /proxytest_xml/cgi-bin/index.cgi にしてください。(CGIのURLがそれ以外なら、そのURLに合わせた記述を)
その他の回答 (1)
- hrm_mmm
- ベストアンサー率63% (292/459)
D:/www/proxytest_xml/a.xml が存在していなくても実行したいならば、virtual指定が必要です。 http://httpd.apache.org/docs/2.2/mod/mod_actions.html#action
お礼
できました! お二人とも、本当にありがとうございます。 <Directory "D:/www/proxytest_xml/"> Options ExecCGI AllowOverride None Order allow,deny Allow from all AddType text/xml .xml Action text/xml "/proxytest_xml/cgi-bin/index.cgi" virtual </Directory> でうまくいきました。 virtual 関しては仕様読み足りず、申し訳なかったです。 また、「存在しないディレクトリ」にもアクセスしたければ、 RedirectMatch \/proxytest_xml\/(.*).xml /proxytest_xml/cgi-bin/index.cgi?filename=$1.xml <Directory "D:/www/proxytest_xml/cgi-bin/"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> とすればいいことも同時に発見しました。 この場合、RedirectMatch は Directory の外で行わないといけないようです。 この場合は Action は不要になります。 要点は、 (1)仕様書内の [URL] は、サーバー名を含んだ完全な URL。 (2)それに対し、仕様書内の [URL-path] は、URL から "http://サーバー名" を除去した後尾だけのもの。 (3)Apache 2.1 以降は、存在しないファイルパスに Action を適用するには virtual が必要。 ですね。 ありがとうございました。
補足
ちなみに、雑談ですが、Action を用いるときって、 毎回、そこに本当に存在するファイルを読み込ませるのではなく、 毎回それとは違う処理をしたくて Action を書く訳ですから、 「virtual を欠いた Action」が必要になる場面ってでてきませんよね。 そこあたり少し Apache 2.1 の仕様に疑問を感じます。 デフォルト virtual 指定で良い気がするのですが。
お礼
ありがとうございます。一歩近づきました。 しかし、 Action text/xml /proxytest_xml/cgi-bin/index.cgi で restart しても以前ブラウザと error.log の表示は変わらないままです。 error.log が [Sat Apr 10 15:07:51 2010] [error] [client 127.0.0.1] File does not exist: D:/www/proxytest_xml/a.xml と言っているということは、第2引数に関わらず、 Action 自体が実行されていないのではないでしょうか? (また、restart 時に他のエラーもでてきませんでした) また、私のようなことをやっている例が書いてあるページが どこかにあるはずだと思って探したのですが、 なかなか見つからないので、ちょっと見当違いの方法なのかもしれません。 少ないながら良く出てくる例は http://bit.ly/bCd85z のような PHP の例ですが。 一般的に、*.jpg や *.xml などをリクエストされて、 サーバーが動的に生成しながら出力する、 という動作は結構使われていて tips にもなっているはずだと思うのですが、 なかなか良い検索ワードが見つからないですね…