さて、ここまででmod_rewriteの導入方法と、基本的な使い方についてご理解いただけたと思います。URLの判定に加えて、アクセス元IPアドレス(Remote_Addr)やアクセスされた年(TIME_YEAR)、ブラウザ種別(HTTP_USER_AGENT)による判定など、実践的な利用例もいくつかご紹介しましたが、ここでもう少し、実際に役立ちそうな設定例をご紹介しておきましょう。
・HTTPでアクセスされたとき、強制的にHTTPSにrewriteする
RewriteCond %{SERVER_PORT} !^443$ RewriteRule (shopping/credit/.*)$ https://%{HTTP_HOST}/$1
アクセスされたポートがSSL(通常は443)でなかった場合に、“https”からはじまるURLへと書き換えています。“$1”はマッチした正規表現の1つめの()部分を抽出する記号です。
・時間や曜日でコンテンツを切り替える
RewriteRule ^week.html$ week%{TIME_WDAY}.html [L] RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY}%{TIME_HOUR}%{TIME_MIN} >200908251730 RewriteRule ^old.html$ new.html
まず1行目では、「week.html」へアクセスがあった場合に、曜日ごとのコンテンツ(week0.html〜week6.html)へリダイレクトしています。3行目のRewriteRuleは、2行目のRewriteCondを踏まえ、アクセスされた時点で特定の日時を過ぎていた場合に適用されます。TIME_YEARやTIME_DAYといった環境変数を利用して日時を文字列で表現し、その大小で判断しています。
なお、1行目の末尾に指定されている“[L]”は、このRewriteRuleが適用された場合に書き換え処理を終了させるためのフラグです(このフラグが指定されていない場合、引き続き後続のRewriteCondやRewriteRuleが評価され、処理は続行されます)。RewriteRuleに指定できるフラグはほかにもありますが、詳細についてはApacheのWebサイトにあるドキュメントを参照してください。
・静的なURLを、パラメータを含む動的なURLへrewriteする
RewriteRule ^(.+)/(.+)/(.+)$ $1.php?mode=$2&id=$3
これは冒頭でお話しした、Webアプリケーションを静的ページ風のURLで動作させるための書き換え例です。正規表現内の()で囲まれた部分を、書き換え後URLで $1、$2、$3……のようにして順番に参照することができます。上記の例では 例えば“/test/edit/123”は、“test.php?mode=edit&id=123”のように書き換えられます。
今度はプログラム側で、静的ページ風のURLからスクリプト名やパラメータを抽出してアプリケーションを実行させてみましょう。今回はPHPを例に解説しますので、まずはPHPがインストールされているか確認してみましょう。
rpm -qa php*
筆者の環境では、Linuxのインストール時には開発言語をインストールしなかったため、何も表示されませんでした。PHPのインストールは、Apacheの導入時と同様にyumコマンドを利用すると簡単です。
yum install php
これで、いくつかの関連パッケージがインストールされます。実行後に確認してみると、以下のように表示されました(yumがインストールすべきパッケージを判断するため、Linuxのディストリビューションやバージョンによって結果は異なります)。
# rpm -qa php* php-cli-5.1.6-23.2.el5_3 php-5.1.6-23.2.el5_3 php-common-5.1.6-23.2.el5_3
Apachのモジュールのディレクトリを確認してみると、PHPのモジュールが追加されていることが判ります。
# ls /etc/httpd/modules/ | grep php libphp5.so
さらに、Apacheの設定ファイルとして、php.confが追加されているはずです。このファイルに、先ほどのモジュールのロードなど、PHP関連の設定が記述されています。コメント以外の部分を抜粋してみると、以下のように記述されています(ApacheやPHPのバージョンによって異なる場合があります)。
# less /etc/httpd/conf.d/php.conf 〜 コメント以外を抜粋 〜 LoadModule php5_module modules/libphp5.so AddHandler php5-script .php AddType text/html .php DirectoryIndex index.php
LoadModuleの行は、先ほど確認したlibphp5.soというモジュールを読み込む設定です。AddHandlerとAddTypeは、“.php”という拡張子のファイルを、PHPスクリプトやHTMLリソースの一種として認識させるための設定です。DirectoryIndexは前にもご説明したとおり、ディレクトリ内でデフォルト表示の対象となるファイル名を指定するもので、ここではindex.phpを追加しています。
設定が確認できたらApacheを再起動し、簡単なPHPスクリプトを設置して確認してみましょう。
<?php echo 'Hello!'; ?>
上記のようなスクリプトを、“.php”という拡張子のファイルとして作成し、例えばドキュメントルートに設置してアクセスしてみてください。
多くの場合はyum(RPM)からのインストールで十分だと思いますが、より柔軟にインストール構成などをカスタマイズしたい場合や、開発用途などで複数のバージョンのPHPを共存させたい場合などは、ソースファイルを入手してインストールする方法も有用です。
PHPをソースからインストールする場合は、http://www.php.net/downloads.phpからソースファイルを入手します。今回は、執筆時点でのPHP5.2系の最新バージョンであるPHP 5.2.10(php-5.2.10.tar.gz)をダウンロードしました(記事公開時点では、さらに新しいバージョンがリリースされています。以下、バージョンに関する表記は適宜読み替えてください)。
入手したファイルを、サーバ上の任意の作業用ディレクトリにアップし、以下の手順でインストールを実行してください。
# 解凍して、解凍先ディレクトリへ移動 tar xvzf php-5.2.10.tar.gz cd php-5.2.10
# コンパイル前の設定 (注:configureのオプションについては下記コラム参照) ./configure --prefix=/usr/local/php-5.2.10 --with-apxs2=/usr/sbin/apxs
# コンパイルとインストールの実行 make make install
これ以外にも多くのconfigureオプションが用意されており、おもにPHPの拡張機能の有効/無効を指定することができますが、ここでは割愛します。
詳細は、PHPのマニュアルの該当箇所を参照してください。
Apacheのインストール時にも説明しましたが、configureやmakeなどの実行時に、インストールに必要な関連ライブラリ(主にソースのコンパイルに必要な開発言語環境)が足りないなどのエラーになることがあります。この場合には、エラーメッセージをよく見て、不足しているパッケージをインストールしてください。configureを実行するとconfig.logというログファイルが生成されますので、そちらも参考にしてください。多くのパッケージは、yumで簡単にインストールすることができます。
ソースからのインストールが完了すると、Apacheの拡張モジュールとしてlibphp5.soが設置され、httpd.confにモジュールをロードする設定が追加されます。ただし、それ以外の設定は自動では追加されないので、先ほどRPMでインストールしたときに自動で追加された設定を参考に、以下の3行をhttpd.confに追加しましょう(DirectoryIndexは必須ではありません。また、既存のDirectoryIndexの設定にindex.phpを追加する形でもかまいません)。
AddHandler php5-script .php AddType text/html .php DirectoryIndex index.php
設定ができたらApacheを再起動し、先ほどと同じく簡単なPHPスクリプトを設置して確認してみましょう。“Hello!”と表示されればインストール完了です。
Copyright © ITmedia, Inc. All Rights Reserved.