ブログ

パラメータでWebページを動的に管理する方法

1つのURLで動的にページを管理する場合には、クエリパラメータを使う方法があります。

「http://hogehoge.com/index.php?id=1」

一方で、ブログサイトなどは

「http://hogehoge.com/id/1」

と、クエリパラメータの"?"は使わずに、URLにパラメータをつけるような形で管理しているサイトが多いです。

見た目上こっちの方がスッキリとしています。

この方法はphpフレームワークを使えば簡単に実現できますが、もしApacheを使っているならば、.htaccessを利用することで実現することができます。

.htaccessでURLを書き換える

方法としては、.htaccessでアクセスするURLを書き換えます。

.htaccessとは、Webサーバーに「Apache」を用いている場合に利用できるファイルで、Webサーバーの制御をおこなうための設定ファイルです。

URLにパラメータをつけてページを管理するには、該当のディレクトリに以下の.htaccessを配置します。


RewriteEngine on
RewriteRule ^([0-9]+)$ index.php?id=$1 [L]
  

これは「http://hogehoge.com/id/数字」にアクセスしたら、「http://hogehoge.com/id/index.php?id=数字」に転送するを意味します。

もう少し詳しく見てみましょう。

RewriteEngine onは、「URLを書き換えますよ」という宣言です。

そしてRewriteRule「書き換えのルール」を設定します。

RewriteRuleで最初に現れる ^([0-9]+)$ は置換対象を正規表現で表現します。

今回のURLでいうと"数字"の部分ですね。

この正規表現は「1文字以上の0から9までの数字からなる文字列」を表します。

次のindex.php?q=$1「書き換え後の形」を表します

$1には、直前の正規表現でマッチした文字列(=今回の例だと"数字"を表す文字列)が入ります。

最後の[L]は、「ここでURL書き換え処理を中止させ、それ以降は書き換えを行わない」ようにする設定値です。

index.phpの挙動を見てみる

試しに http://hogehoge.com/id/123 へアクセスしてみます。

※hogehoge.comは適当です。

index.phpの中身はこんな感じで、パラメータをただ表示するだけのものを用意しまます。


<?php
  echo $_GET["id"];
?>
  

実際にアクセスすると、以下のようにパラメータがブラウザに表示されます。

.htaccessを有効にする

転送が動作しない場合、.htaccessが有効になっていない可能性があります。

有効にするには、httpd.confの設定を見直します。

httpd.confで.htaccessを有効にしたい該当のディレクトリコンテナ内で、


    AllowOverride None
  

となっていた場合、


    AllowOverride All
  

とします。

ぜひご参考まで。