さて、
CGIを有効にする
まずはmod_
今回はmod_
それでは現在使用しているVirtualHost内にCGIの設定を追加しましょう。
下記の設定を追加してください。
<VirtualHost *:80>
DocumentRoot /usr/local/apache2/vhosts/www.example.com/htdocs
ServerName www.example.com
ErrorLog /usr/local/apache2/vhosts/www.example.com/logs/error_log
CustomLog /usr/local/apache2/vhosts/www.example.com/logs/access_log common
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" ## 追加
RewriteEngine on
RewriteLogLevel 9
RewriteLog /tmp/rewrite.log
RewriteRule /index.html /foo/bar/sample.html
</VirtualHost>
これで/usr/
以下のファイルパスに確認用のプログラムを設置してください。
Path : /usr/local/apache2/cgi-bin/index.pl
内容は、
上記のパスにファイルを設置したら実行権限を追加して、
- http://
servername/ cgi-bin/ index. pl?id=foo&name=bar
図1のように表示されればCGIの設置完了です。

mod_rewriteでつくる簡潔なURL
さて、
以下の通りに書き換えます。
http://servername/cgi-bin/index.pl/foo/bar
http://servername/cgi-bin/index.pl?id=foo&name=bar
それでは、
<VirtualHost *:80>
DocumentRoot /usr/local/apache2/vhosts/www.example.com/htdocs
ServerName www.example.com
ErrorLog /usr/local/apache2/vhosts/www.example.com/logs/error_log
CustomLog /usr/local/apache2/vhosts/www.example.com/logs/access_log common
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
RewriteEngine on
RewriteLogLevel 9
RewriteLog /tmp/rewrite.log
RewriteRule ^/cgi-bin/index\.pl/([0-9a-z]+)/([0-9a-z]+)$ /cgi-bin/index\.pl?id=$1&name=$2 [PT] ## 追加
</VirtualHost>
RewriteRuleが追加されていることが確認できましたか?
- http://
servername/ cgi-bin/ index. pl/ foo/ bar
図1と同じものが表示されれば成功です。
RewriteRuleの書き方
それではRewriteRuleの書き方を見ていきましょう。RewriteRuleの書式は以下の通りとなっています。
RewriteRule 書き換え前のURL 書き換え後のURL [オプション]
上記のルールをサンプルの設定ファイルに当てはめてみると以下のようになります。
^/cgi-bin/index\.pl/([0-9a-z]+)/([0-9a-z]+)$
/cgi-bin/index\.pl?id=$1&name=$2
正規表現に慣れていないとちょっとつらいかもしれません。ここでポイントとなるのは、
これは後方参照とよばれるテクニックで、
mod_
RewriteRuleのオプション
それでは、
上記の例では[PT]と設定しています。実は、
これは、
ただし、
[TIPS] RewriteLogでrewriteの内容を参照する
いろいろとrewriteを設定してきましたがアプリケーションの構造によってはもっと設定が複雑になることもしばしば。予想以上にrewriteの設定にハマってしまうこともあるでしょう。そんなときは、
下記の2行の部分です。
RewriteLogLevel 9
RewriteLog /tmp/rewrite.log
rewriteの設定中はLogLevelを最高レベルの9に指定しておくのがよいでしょう。どこまでマッチしたのか、
最後に
さて、