単純に『携帯からと思われるアクセス』だけ、リダイレクトかけたいとする。
例えば、
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』と組み合わせれば、方法はありそうだけども
まぁ、何か出来ない
※参照
- 携帯ブラウザのユーザーエージェント(User-Agent)による機種判別、キャリア判別
- 作ろうiモードコンテンツ:iモードセンタのIPアドレス帯域
- KDDI au: 技術情報 > IPアドレス帯域
- WEB & NETWORK IPアドレス
調べては閉じてを繰り返してたから、もうどこをどう参考にしてたもんだか…
因みに飛ばすときは『300』で飛ばすと、DoCoMo端末だと『ページが移動しました』て出てくるんで、『301』で飛ばすことをオススメする
PHPを例にすると下記のような形。
header('Location: http://www.example.com/', true, 301);
コメント
大変助かりました。
ありがとうございました。