SEOという言葉が普及して久しいですが、SEO対策の1つとしてURLを最適化する という方法があります。たとえば以下の2つのURLを見比べてみてください。

A.http://phppro.jp/news/detail.php?id=10

B.http://phppro.jp/news/detail/10/

検索エンジンは、AのURL表記よりもBのURL表記を好み、ページの評価が高くなり ます。 このようなURLの最適化をPHP言語だけで処理するのは困難です。そのため、Web サーバーの機能によりURLの「書き換え」を行い、BのリクエストをAのリクエス トに移すことで対応を行います。これを実現する仕組みの1つがmod_rewriteモ ジュールです。

mod_rewriteモジュールは、Apacheに標準で添付されているモジュールで、多く のパッケージでデフォルトで組み込まれています。SEO対策以外にも幅広く使え るモジュールですが、今回は簡単のため、先ほどのURL書き換えの解説を行います。

RewriteEngine On
RewriteRule ^\/news\/([0-9]+)\/? /news/detail.php?id=$1 [L]

RewireEngineディレクティブは、mod_rewrite機能の有効・無効を設定します。 そして、RewriteRuleディレクティブで書き換えルールを設定します。 RewriteRuleは複数個を記述できます。

RewriteRuleディレクティブは、以下の構文をしています。

RewriteRule 検索パターン 置換文字列 [フラグ1,フラグ2・・・]

検索パターンには、POSIX互換の正規表現を記述できます。タグ付き正規表現に も対応しており、(から)で囲まれた部分は、置換文字列にて$N(ただしNは順 番)と参照することができます。

フラグには、置き換えルールの動作を指定します。今回指定しているLは、ここ で書き換えを終了することを表しています。要するにRewriteRuleが複数個記述 されていた場合にも、その先のRewriteRuleが解釈されなくなる、という事です。

また、RewriteRuleの前にRewriteCondディレクティブを記述することもできま す。これは、特定の条件に当てはまる場合にのみ、URLの書き換えるためのもの です。

ただしmod_rewriteは正規表現を使用する関係上、どうしても速度の低下が生じ てしまいます。より単純なURLの置換であれば、mod_aliasなどのモジュールを使 う方がよいでしょう。

また、PHPの場合はPATH_INFOを使って同様のSEO対策を行うことも可能です。こ れは、mod_rewriteを使わない方法で、URLはCのようになります。

C.http://phppro.jp/news/detail.php/id/10/

詳しくは、GoogleなどでPATH_INFOを検索してみると良いでしょう。

以上、簡単に解説しましたが、mod_rewriteの備える機能はまだまだあります。 詳しい機能の説明は、リンク先のマニュアルやチュートリアルを参照してください。

mod_rewriteマニュアルの日本語訳:http://www.net-newbie.com/trans/mod_rewrite.html
Apache URL Rewriting Guideの日本語訳:http://japache.infoscience.co.jp/rewriteguide/


(アシアル 田中正裕)

この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。