htaccessによるデバイス振り分け

  • 48
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

デバイスごとに振分けを行い、指定ディレクトリにリダイレクトさせる

▼前提条件

(1) SPディレクトリが、PCディレクトリのサブディレクトリになっている。
(例)
 PCサイト : http://example.com/
 SPサイト : http://example.com/sp/

(2) 同一ページは同一のファイル名になっている。
(例)
 PCサイト : http://example.com/page01.html
 SPサイト : http://example.com/sp/page01.html

.htaccess
RewriteEngine on

RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^(.*)$ sp/$1 [R]
RewriteBase /

RewriteCond %{REQUEST_URI} /sp/
RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^sp/(.*)$ $1 [R]
RewriteBase /

リクエストしたURLに /sp/ が含まれず(2行目)、
かつ、ユーザーエージェントにiPhone、Android等が含まれる場合(3行目)、
ファイル名の前に sp/ を足したURLに書き換える(4行目)。

リクエストしたURLに /sp/ が含まれ(6行目)、
かつ、ユーザーエージェントにiPhone、Android等が含まれない場合(7行目)、
URLから sp/ を取り除く(8行目)。

URLをリライトする場合

PCサイトからSPサイトに転送する際、ブラウザ上のURLを変えず、PCサイトと同一のURLで遷移させる場合は、4行目および8行目末尾の [R] を [L] に書き換える。

RewriteRule のオプション

[R]
強制的にリダイレクト
[L]
書き換えが行われたら終了 (Last) にする。
現在の書き換え後の URL が後続のルール によってそれ以上書き換えられることを防止する。
[F]
強制的にアクセス禁止
HTTP レスポンスの「403 : Forbidden」を返す。
[NC]
パターンについて、文字の大小を区別しない(No Case)。 つまり、"A-Z" と "a-z" は区別しない。

⇒ htaccessによるPC・スマートフォンの振り分け転送

各デバイスとも同一URLで表示する場合

▼ディレクトリ構成

/pc/ : PC用データ
/sp/ : SP用データ
※リソースデータは、それぞれのディレクトリ配下に格納され、別ディレクトリを参照しない前提。

▼URL

/pc/ /sp/ はURLには含まれない。
それぞれ同階層に同一名のファイルが置かれていることが前提。
リンクのパスも /pc/ /sp/ は含まずに記述する。

.htaccessの記述

.htaccess
RewriteEngine on
#ループ防止
RewriteCond %{REQUEST_URI} ^/(pc|sp)/
RewriteRule .* - [L]
#スマートフォン
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule  ^(.*)$ sp/$1  [L,NS]
#PC
RewriteRule  ^(.*)$ pc/$1  [L,NS]
RewriteBase /

/pc/ /sp/ の各ディレクトリ直下の.htaccessに以下を記述。

.htaccess
RewriteEngine off

⇒ htaccessで、PC・スマートフォン・モバイルを同一URLで振り分けて転送する方法