携帯からのアクセスだけリダイレクトさせる

単純に『携帯からと思われるアクセス』だけ、リダイレクトかけたいとする。

例えば、
PCページが『http://aaa.bbb.com/pc/aaa.html』として
携帯なら『http://aaa.bbb.com/mobile/aaa.html』に移動したいというような場合だ。

IPアドレスで仕分るのが一番いいんだけど、
機種増える度に追加したり、
DoCoMoの2.0ブラウザなんて変更しよるから管理するのタルイし
公式化や、会員制とかにしなくていいなら
『USER AGENT』で判断するのをオススメする。
※mod_rewrite必須

※USER AGENTについては、過去記事『USER AGENTメモ』参照のこと

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} "DoCoMo" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "J-PHONE" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "Vodafone" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "SoftBank" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "KDDI" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^MOT-.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "UP.Browser" [NC]
RewriteCond %{HTTP_USER_AGENT} "DDIPOKET" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^SAMSUNG.* [NC,OR]
RewriteRule ^(.*)$ /モバイル用ディレクトリ/$1 [R,L]
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^(DoCoMo|KDDI|DDIPOKET|UP\.Browser|J-PHONE|Vodafone|SoftBank|SAMSUNG)
RewriteRule ^(.*)$ /モバイル用ディレクトリ/$1 [R,L]

キャリア別に移動するページを変えたいならば

RewriteCond %{HTTP_USER_AGENT} "DoCoMo"
RewriteRule ^(.*)$ /DoCoMo用ディレクトリ/$1 [R,L]

RewriteCond %{HTTP_USER_AGENT} "J-PHONE" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "Vodafone" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "SoftBank" [NC,OR]
RewriteRule ^(.*)$ /Softbank用ディレクトリ/$1 [R,L]
	(略)

のように『RewriteCond』と『RewriteRule』を繰り返せばいい。

ここで注意すべきは
『http://aaa.bbb.com/aaa.html』から
『http://aaa.bbb.com/mobile/aaa.html』に
移動しようと上記を書くと、
『http://aaa.bbb.com/mobile/mobile/mobile/mobile/mobile/mobile/(以下略)』
のように、延々ループを繰り返してしまう。

因みに

RewriteRule ^(.*)$ /モバイル用ディレクトリ/$1 [R,L]

RewriteRule ^(.*)$ /モバイル用ディレクトリ/moba.html [R,L]

とすれば、固定ページに、

RewriteRule ^(.*)$ http://モバイルサイト/$1 [R,L]

とすれば、別のアドレスに移動になる。

リモートのホスト名は、偽装出来ないそうなので

RewriteCond %{REMOTE_HOST} ^docomo\.ne\.jp$ [NC]
RewriteCond %{REMOTE_HOST} ^ezweb\.ne\.jp$ [NC]
RewriteCond %{REMOTE_HOST} ^(jp-d\.ne\.jp|jp-h\.ne\.jp|jp-t\.ne\.jp|jp-c\.ne\.jp|jp-k\.ne\.jp|jp-r\.ne\.jp|jp-n\.ne\.jp|jp-s\.ne\.jp|jp-q\.ne\.jp)$ [NC]

というのも有りだろうけど
サーバによっては取れないこともあるらしい。

ので

RewriteCond %{REMOTE_HOST} ^docomo\.ne\.jp$ [NC,OR]
RewriteCond %{REMOTE_ADDR} ^210\.153\.84\.*
RewriteCond %{REMOTE_ADDR} ^210\.136\.161\.*
RewriteCond %{REMOTE_ADDR} ^210\.153\.86\.*
RewriteCond %{REMOTE_ADDR} ^124\.146\.174\.*
RewriteRule ^(.*)$ /DoCoMo用ディレクトリ/$1 [R,L]

とするのも有りだけど、
allow from を1個1個設定しておくのと手間がかわらないね。

別のアドレス(どのキャリア・どのページからでも同じページ)に移動させるだけならば、

SetEnvIf User-Agent "J-PHONE" sb
SetEnvIf User-Agent "SoftBank" sb
SetEnvIf User-Agent "Vodafone" sb
SetEnvIf User-Agent "MOT" sb
SetEnvIf User-Agent "DoCoMo" dcm
SetEnvIf User-Agent "KDDI" au
SetEnvIf User-Agent "UP.Browser" au

Order Allow,Deny
Allow from all

Deny from env=sb
Deny from env=dcm
Deny from env=au

でアクセスを拒否しておいて

ErrorDocument 403 『表示させたいURL』

としておくのが楽。

リダイレクトする方法は他に
mod_aliasが必要だけど

Redirect permanent 『アクセス対象ファイル名』 『移動先URL』

というのがあって
『SetEnvIf』と組み合わせれば、方法はありそうだけども
まぁ、何か出来ない

※参照

調べては閉じてを繰り返してたから、もうどこをどう参考にしてたもんだか…

因みに飛ばすときは『300』で飛ばすと、DoCoMo端末だと『ページが移動しました』て出てくるんで、『301』で飛ばすことをオススメする

PHPを例にすると下記のような形。

header('Location: http://www.example.com/', true, 301);

コメント

  1. pinks より:

    大変助かりました。
    ありがとうございました。

タイトルとURLをコピーしました