.htaccess で
UAを判別して携帯用ページに振り分ける

今のところ携帯に対応したサイトにする気はないのですが、どうも前に記述した301 リダイレクトする方法携帯ユーザーを適切に誘導しよう のページに、携帯について触れたためか少数ですがそれらしいキーワードで検索から来る人がいるようです。

なので、どうにも見当違いのページにアクセスされても心苦しいので、.htaccess による携帯ユーザーを携帯用ページに振り分ける方法について記述しておきます。

.htaccess が使用可能でも、ご使用の Apache サーバーで mod_rewrite が読み込まれてなければ利用できません。

記述の意味

RewriteEngine
書き換えを可能にするかどうかです。値は On で可となります。(Off で無効となります。)
RewriteCond
条件付けです。RewriteCond でのパーセント記号(%)は、環境変数を表し、{}の中に接続してきたブラウザなどの情報から環境変数名を読み込んで使用します。その他、読み込まれた変数名が合致するかどうかの条件と、次に記述する条件との関係についてのオプションが記述されます。
  • RewriteCond %{HTTP_USER_AGENT} DoCoMo [OR]
上記のものは、環境変数としてユーザーエージェントの情報を読み込み、それが DoCoMo なら合致したことになります。その後の、[OR]は「または」という意味になり、 次に続く RewriteCond と結びます。(OR を付けないと AND になる)

使用できるオプションは、他に大文字小文字を区別しないとする[NC]があります。(DOCOMO でも合致になる。)

RewriteRule
URLを書き換える場合のルールを記述します。左からURLの書き換える部分、書き換える記述、オプションとなります。
  • RewriteRule ^$ /i/index.html [R]
上記のものは、行頭と行末の中が空なので、トップページにアクセスした場合のみURLを /i/index.html に書き換えることになります。

オプション[R]は、302(一時的な移動) を返し、リダイレクトすると意味です。他のオプションについては、参考にさせていただいたサイトで詳しく記述されてますので、そちらでどうぞ。

.htaccess への記述

  • RewriteEngine On
  • RewriteCond %{HTTP_USER_AGENT} (DoCoMo|UP\.Browser|SoftBank|Vodafone)
  • RewriteRule ^$ /i/index.html [R]

これを記述することで、トップページに携帯からアクセスされた場合は、携帯用サイトに振り分けることができます。(他のユーザーエージェントについては追記してください。)

別個のページからの振り分け

ただ、上の記述では別個のページに検索から来た場合は振り分けられません。そこで、それぞれのページで振り分けたい場合は、以下のように RewriteRule の値を変更します。

  • RewriteEngine On
  • RewriteCond %{HTTP_USER_AGENT} (DoCoMo|UP\.Browser|SoftBank|Vodafone)
  • RewriteRule (.*) /i/$1 [R]

この記述をする場合は、携帯用ディレクトリ(i)にも .htaccess ファイルを置き、その中で必ず RewriteEngine Off の記述をしましょう。記述しないとリダイレクトループになります。

また、トップページだけ振り分ける場合は、レイアウト次第でCSSやエラーページをPCページと同様に共用することができますが、この別個のページの振り分けは、ディレクトリ内のURLならどのような場合のURLも書き換えることになるので、サイトの構造をまるごと携帯用ディレクトリに作りましょう。(ファイル名も一字一句同様に)

HTMLでの記述

携帯用のページは、内容自体はPCでのページと同じになってしまうので、検索エンジンのために link rel="canonical" で正規の文書が別にあることを知らせましょう。

  • <link rel="canonical" href="PCページのURL" />

最後に、元(PC用)のページにて、link rel="alternate" で代替文書があることを知らせます。

  • <link rel="alternate" href="携帯ページのURL" />

後書き

今回の携帯ページへの振り分けは、一時的に形だけの携帯用のディレクトリとページをサーバーに置いてみてチェックしたので、とりあえず動作は保証できます。

私としては、.htaccess でユーザーエージェントでなく画面解像度を環境変数で取得できるのなら、振り分けを使用したいところですが。

スポンサードリンク

inserted by FC2 system