UNIX的なアレ:gihyo.jp出張所

第14回 知っておきたいApacheの基礎知識 その10

この記事を読むのに必要な時間:およそ 2 分

さて,前回は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の設置完了です。

図1 サンプルの実行画面

図1 サンプルの実行画面

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と同じものが表示されれば成功です。

著者プロフィール

和田修一(わだしゅういち)

株式会社ロケットスタートCTO。PHPやPerlを中心としたアプリケーション開発から,Linuxなどの技術を中心としたインフラ系の設計・構築を担当。個人Blogは「Unix的なアレ」。

コメント

コメントの記入