LoginSignup
84

More than 5 years have passed since last update.

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

Posted at

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

▼前提条件

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
84