htaccess

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

More than 3 years have passed since last update.


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


▼前提条件

(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で振り分けて転送する方法