さて,前回はmod_rewriteの基本的な動作を説明しました。mod_rewriteができることの概念は理解できているかと思います。今回は,より実践的なmod_rewriteの使い方に踏み込んでいきたいと思います。
CGIを有効にする
まずはmod_rewriteに取り掛かる前にやるべきことがあります。QueryStringで受け取った値を参照したりしたいため,アプリケーションを稼働させる環境を作りましょう。
今回はmod_cgiを利用して,perlで設定してみようと思います。
それでは現在使用している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/local/apache2/cgi-bin/配下のファイル実行することが可能となりました。それでは引き続き,確認用のプログラムの配置を行いましょう。
以下のファイルパスに確認用のプログラムを設置してください。
Path : /usr/local/apache2/cgi-bin/index.pl
内容は,QueryStringで受け取ったパラメーターの値を表示するだけのシンプルなスクリプトです。
上記のパスにファイルを設置したら実行権限を追加して,Apacheを再起動後ブラウザからアクセスしてください。
- http://servername/cgi-bin/index.pl?id=foo&name=bar
図1のように表示されればCGIの設置完了です。
mod_rewriteでつくる簡潔なURL
さて,URLの中に?が入っているとSEO的に不利なことは前回簡単に説明いたしました。しかしながら,先ほどのサンプルのURLには?が含まれたURLになっています。まずはこれを書き換えるようにしてみましょう。
以下の通りに書き換えます。
書き換え前
http://servername/cgi-bin/index.pl/foo/bar
書き換え後
http://servername/cgi-bin/index.pl?id=foo&name=bar
それでは,上記のパターンを可能にするmod_rewriteの設定を行っていきましょう。下記の設定ファイルを見てください。
<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が追加されていることが確認できましたか?Apacheを再起動後,以下のURLにアクセスしてみてください。
- http://servername/cgi-bin/index.pl/foo/bar
図1と同じものが表示されれば成功です。

