• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Apache で特定の拡張子を持つファイルへのリクエストを cgi に)

Apacheで特定の拡張子を持つファイルへのリクエストをcgiに送る方法

このQ&Aのポイント
  • Apacheの設定ファイルで拡張子と実行ファイルを関連付けて、特定の拡張子を持つファイルへのリクエストをcgiに送ることができます。
  • 設定ファイルにAddHandlerとActionディレクティブを使用し、拡張子.xmlのファイルがリクエストされた場合にD:/www/proxytest_xml/cgi-bin/index.cgiが実行されるように設定します。
  • ただし、設定に関連するディレクトリのパーミッションやAllowOverrideディレクティブなどを正しく設定する必要があります。

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

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に合わせた記述を)

ubutton
質問者

お礼

ありがとうございます。一歩近づきました。 しかし、 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 にもなっているはずだと思うのですが、 なかなか良い検索ワードが見つからないですね…

その他の回答 (1)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

D:/www/proxytest_xml/a.xml が存在していなくても実行したいならば、virtual指定が必要です。 http://httpd.apache.org/docs/2.2/mod/mod_actions.html#action

参考URL:
http://httpd.apache.org/docs/2.2/mod/mod_actions.html#action
ubutton
質問者

お礼

できました! お二人とも、本当にありがとうございます。 <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 が必要。 ですね。 ありがとうございました。

ubutton
質問者

補足

ちなみに、雑談ですが、Action を用いるときって、 毎回、そこに本当に存在するファイルを読み込ませるのではなく、 毎回それとは違う処理をしたくて Action を書く訳ですから、 「virtual を欠いた Action」が必要になる場面ってでてきませんよね。 そこあたり少し Apache 2.1 の仕様に疑問を感じます。 デフォルト virtual 指定で良い気がするのですが。

関連するQ&A