【RewriteRule】動的URLを静的URLにしてSEO対策!

URLクエリパラメータを使うと1ファイルだけで(例えば「index.php」)様々なページを動的に作ることができます。

URLクエリパラメータが付いたURLは「https://colorcode-to-rgb.luck-jp.com/index.php?colorcode=666666」という感じで「?colorcode=666666」というパラメータになります。

このパラメータ付URL「https://colorcode-to-rgb.luck-jp.com/index.php?colorcode=666666」を動的URLと言い、phpであれば$_GET(GET変数)によって「colorcode」の値「666666」を取得できます。

これを使えば、index.phpだけで他のカラーコードのページも動的に作ることができます。
※実際に実装したサイトがこちら「https://colorcode-to-rgb.luck-jp.com/

前置きが長くなりましたが、この動的URL「https://colorcode-to-rgb.luck-jp.com/index.php?colorcode=666666」と同じ効果を次のような静的URL「https://colorcode-to-rgb.luck-jp.com/666666/」で得る方法をご説明します。

つまり、静的URLですが、$_GET(GET変数)でパラメータの値を取得できるようにします。

静的URLとは

静的URLとはURLクエリパラメータが付いていないURLのことです。

動的URLを疑似的に静的URLにする方法

<IfModule mod_rewrite.c>
RewriteEngine on
#ディレクトリ名とパラメータを紐づけます
RewriteRule ^(.*)/$ /index.php?colorcode=$1 [L]
</IfModule>

↑こちらを「.htaccess」に追記すると、URLのディレクトリ部分をパラメータの値と認識させることができます。
※編集する際はバックアップしてからお試しください

コピーして利用する場合について

ご自身が利用したいパラメータ名に変更の上ご利用ください。
また、パラメータを複数利用したい場合は、下記にパラメータ2つのパターンも掲載していますので、そちらも参考にしてください。

少し分かりにくいと思いますので、少し説明しますね。

URLのディレクトリ部分をパラメータの値と認識させる

例えば、「https://colorcode-to-rgb.luck-jp.com/666666/」であれば、「666666」というディレクトリ部分を「https://colorcode-to-rgb.luck-jp.com/index.php?colorcode=666666」というようにパラメータとして扱ってくれます。

もちろん「https://colorcode-to-rgb.luck-jp.com/666666/」でアクセスしても$_GET(GET変数)によって「colorcode」の値「666666」を取得できます。

パラメータを2つ設定したい場合

<IfModule mod_rewrite.c>
RewriteEngine on
#カラーコード&フォントサイズ
RewriteRule ^(.*)/(.*)/$ /index.php?colorcode=$1&fontsize=$2 [L]
</IfModule>

↑こちらを「.htaccess」に追記すると、URLのディレクトリ部分をパラメータの値を2つ認識させることができます。

1つの時との違いは青字部分です。単純にディレクトリとパラメータを1つ増やしただけです。

具体例を見た方がイメージしやすいかと思いますので、挙げておきますね。2つのディレクトリ名がパラメータと紐づいていることが見て取れると思います。

「https://colorcode-to-rgb.luck-jp.com/33000/16px/」

「https://colorcode-to-rgb.luck-jp.com/index.php?colorcode=33000&fontsize=16px

コピーして利用する場合について

ご自身が利用したいパラメータ名に変更の上ご利用ください。
また、パラメータを3つ以上ご利用になりたい方は、2つのパターンを参考に、同じようにディレクトリ&パラメータを増やすと実現できるかと思います。よく分からない場合はコメントいただければ、こちらでも考えてみますので、お気軽にコメントしてくださいね。

4行目(RewriteRule)

RewriteRule ^(.*)/$ /index.php?colorcode=$1 [L]

アクセスしてきたURLのディレクトリ部分をパラメータとしたURLに内部転送します。

例えば、「https://colorcode-to-rgb.luck-jp.com/cc0000/」でアクセスされた場合、URLはそのままで中身は「https://colorcode-to-rgb.luck-jp.com/index.php?colorcode=cc0000」のページが表示されます。

実際に各ページにアクセスしてみてください。どちらも同じページが表示されると思います。

以下各機能・記号の説明です。

RewriteRule
URL の書き換えを行います。1つ目のスペースの後の「条件パターン」に一致する URL を、2つ目のスペースの後の「置換文字列」で書き換えます。
「.」(正規表現)
任意の1文字
「*」(正規表現)
直前の文字が 0回以上 繰り返す
「.*」の場合、どんな文字列でもという意味
$1
パターン部分の 1つ目の「()」の中の文字列を使います。パターン部分とは、今回の場合だと「^(.*)/$」となっている部分です。この1つ目の「()」内にはドメインより後ろの文字列がフルで入っています。ただし、「/」は()の外にあるので最後の「/」は含まれません。

例をあげると「https://colorcode-to-rgb.luck-jp.com/cc0000/」であれば、「cc0000」になります。
※ドメイン直後の「/」は含みません

$2
パターン部分の 2つ目の「()」の中の文字列を使います。パターン部分とは、今回の場合だと「^(.*)/(.*)/$」となっている部分です。
※パラメータを2つ設定したい場合の参考htaccessソースより
[L]
Lは、ここで終了という意味です。

まとめ

  • 静的URLでアクセスされた場合でも動的URLとして扱うことができる

パラメータ1つの場合

<IfModule mod_rewrite.c>
RewriteEngine on
#ディレクトリ名とパラメータを紐づけます
RewriteRule ^(.*)/$ /index.php?colorcode=$1 [L]
</IfModule>

パラメータ2つの場合

<IfModule mod_rewrite.c>
RewriteEngine on
#カラーコード&フォントサイズ
RewriteRule ^(.*)/(.*)/$ /index.php?colorcode=$1&fontsize=$2 [L]
</IfModule>

↑こちらを「.htaccess」に追記すると、URLのディレクトリ部分をパラメータの値と認識させることができます。
※編集する際はバックアップしてからお試しください

コピーして利用する場合について

ご自身が利用したいパラメータ名に変更の上ご利用ください。
また、パラメータを3つ以上ご利用になりたい方は、2つのパターンを参考に、同じようにディレクトリ&パラメータを増やすと実現できるかと思います。よく分からない場合はコメントいただければ、こちらでも考えてみますので、お気軽にコメントしてくださいね。

見た目がすっきりするので個人的にはパラメータ無しが好みです。ちなみにURLクエリパラメータの場合でも検索エンジンにはインデックス登録されるようですので、そちらでも特に問題はないようです。

ただし、「https://colorcode-to-rgb.luck-jp.com/cc0000/」「https://colorcode-to-rgb.luck-jp.com/index.php?colorcode=cc0000」というように同じページが表示されるのにURLが異なる場合は、SEO的に評価を下げるようなのでリダイレクトやcanonical属性などの設定を行うようにしましょう。