.htaccessでURLパラメーターを静的HTMLかのように書き換える

PHP
この記事は約4分で読めます。

はじめに

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的にも有利だということなのでうまく活用してみてください。