RewriteRuleとCGI
CGIの呼び出しをRewriteRuleで書き換えるときは、以下の点に注意する必要がある。
- RewriteRuleディレクティブで指定するマッチパターンの対象となるものは、CGIへのパラメータを含んだREQUEST_URIではなく、CGIファイルパスのみのSCRIPT_NAME(または、SCRIPT_URL)である。
- CGIへのパラメータを照合する場合は、RewriteCondディレクティブでQUERY_STRINGのマッチングを行う。
※REQUEST_URI、SCRIPT_NAME、SCRIPT_URL、QUERY_STRINGは環境変数のこと。
# 設定例) # http://server/test.cgi?hoge=1&fuge=hello を # http://server/sample/test.cgi?hoge=1&fuge=hello に書き換え RewriteEngine on RewriteCond %{QUERY_STRING} (^|&)hoge=1(&|$) RewriteCond %{QUERY_STRING} (^|&)fuge=hello(&|$) RewrieRule ^/test\.cgi$ /sample/test.cgi
「Apache mod_rewrite」の日本語ドキュメントはこちらを参照。
ちなみに、Apache 1.3のmod_rewriteは"configure --enable-shared=max"としてもビルドされないので、以下の手順で手動インストールする必要がある。
- "cd <Apacheソースディレクトリ>/src/modules/standard/"と実行して、カレントディレクトリを移動する。
- "make mod_rewrite.so"と実行して、mod_rewrite.soをビルドする。
- ndbm.hが無い旨のエラーが発生した場合:
- mod_rewrite.hの"#ifndef NO_DBM_REWRITEMAP"の前の行に"#define NO_DBM_REWRITEMAP"と記述する。
- 再度"make mod_rewrite.so"を実行する。
- "sudo cp mod_rewrite.so <Apacheインストールディレクトリ>/libexec"と実行して、mod_rewrite.soをにコピーする。
- "<Apacheインストールディレクトリ>/httpd.conf"に以下の行を追加する。
- LoadModule rewrite_module libexec/mod_rewrite.so
- AddModule mod_rewrite.c