はじめに
PHPで動的ページを作成した際にURLにクエリパラメーターを付加してGETで受け取り、動的にページを生成するなんてことはよくあることだと思います。
しかし、受け渡すパラメーターが増えると、URLがとんでもなく長いものになってしまいます。
例えば以下のようなURLを見たことはないでしょうか。
http://ドメイン.jp/index.php?_V=Gtugkd6d&_P=regist&_CD=A&_ID=39d9495955
SEO的にもあまりよくないという情報もありますので、.htacessを使用したURLマッピング方法を解説します。WordpressやPHPのフレームワークなど、最初からこの機能が備わっているものもありますが、今回はスクラッチ開発のPHPプログラムの場合となります。
URLパラメーターとは
URLパラメーターとは、URLの末尾にくっついた変数のようなものになります。
ひとつ例をあげますと、ある店舗検索のシステムを作成したと仮定しまして、以下のようなURLにてアクセスするとします。
http://ドメイン.jp/shop/shop_search.php?A=[文字列]&type=[文字列]&w=[文字列]
この場合、以下の3つのクエリパラメータが末尾にセットされていることになります。
- A=[文字列]
- type=[文字列]
- w=[文字列]
PHP側では$_GET[]でこれらの値を受け取ることができます。
- $_GET[‘A’]
- $_GET[‘type’]
- $_GET[‘w’]
URLを綺麗に整形したい
ここからが本題なのですが、この長いURLを綺麗に整形して、これまでどおりPHP側にてGETとして取得したいとします。
例として、以下のようなURLでアクセスするよなパターンを考えます。
https://ドメイン.jp/shop_search/search_category_7.html
上記URLですと、見た目では静的HTMLにアクセスしているようなイメージとなります。しかし、内部ではPHPにクエリパラメーターを埋め込んでアクセスしていることになります。
.htaccessを調整する
実現するにはPHPのみでは解決しません。.htaccessというファイルを使用します。Apache系のウェブサーバーですと大体使用可能となっています。稀に、ユーザーディレクトリ内での.htaccessの使用を禁止する設定になっている場合があります。
早速.htaccessの内容を以下のように書き換えます。
RewriteEngine On
RewriteRule search_(.*)_(.+)\.html shop_search.php?A=result&type=$1&w=$2 [L]
「RewriteEngine On」という行は、Apacheのモジュールであるmod_rewriteを利用するときに使う宣言文になります。これを記載しないと、その後のリライトルールが実行できません。
RewriteRuleにて、置き換えるURLを正規表現を使って記載します。「正規表現」というのは文字列を置き換える際に使用するコマンドです。これを説明しようとすると1ページでは終わりませんので、ネットで検索してみてください。
上記の場合、search_の後に続く括弧に囲まれた(.*)という部分の文字列を取得することになります。そのすぐ後ろにも同じように(.+)がありますので、2つの文字列を取得することになります。
取得した文字列は自動的に$1、$2という変数に代入されます。
最終的に、以下のようなクエリパラメーターが取得できることになります。
- A=result
- type=category
- w=7
取得した$1、$2の変数を以下のようにセットすることにより、PHPにGETでパラメーターを渡すことが可能となります。
shop_search.php?A=result&type=$1&w=$2
上記は、以下URLでアクセスしたものとみなされます。
shop_search.php?A=result&type=category&w=7
まとめ
URLにパラメーターをセットして動的ページを生成するパターンは多々あると思います。
スクラッチで開発したプログラムの場合、クエリパラメーターとURL置き換えがうまくできるように、事前に想定して設計しなければなりません。
見た目的にもすっきりしますし、SEO的にも有利だということなのでうまく活用してみてください。