Big Bang

パソコンの電源を入れた時、メモリー空間に無限の宇宙が拡がる

.htaccessで携帯振り分け

| 0件のコメント

今回作ったドロップシッピングのネットショップ2店舗は
どちらも、「もしもドロップシッピング」の
ショップできすぎくん」を使って作っている。

HTMLの知識がゼロでも、「肉汁! – 肉とビールの通信販売」や「電化通販 キッチンとリビング
くらいのWebショップは誰でも作れる。

「ショップできすぎくん」は「忍者ホームページ」にデータを自動で書き出す。

各携帯キャリアごとのページも「ショップできすぎくん」がサブディレクトリに自動生成してくれ、
「忍者ホームページ」で、携帯からのアクセスをサブディレクトリに振り分けてくれる。

とても便利。そして「忍者ホームページ」では、独自ドメインも使えるので使ってみた。

だが、ここで問題が。

「忍者ホームページ」では自分のDNSでCNAMEの設定をしておけば独自ドメインが使えるのだが、そうすると、「ショップできすぎくん」のシステムから、販売サイトが見えなくなってしまうのだ。

そうなると、いろいろ問題がありそうなので、書き出したファイルを別サーバーにコピーして、
そちらで独自ドメインを使用。「忍者ホームページ」はミラーサイトという形で残しておく。

ちなみに、下の2つが「忍者ホームページ」用のURL。なかなかオシャレだ。
オシャレすぎて、販売サイトで使うのは気が引ける。

肉汁! – 肉とビールの通信販売
http://mise.chikouyore.com/ (店。近う寄れ.com)
電化通販 キッチンとリビング
http://sessya.koiwazurai.com/ (拙者、恋煩い.com)

ということで、ファイルを別サーバーに移すと、今度は独自ドメインが安全に使えるが、
携帯からのアクセスを自動で振り分けてくれなくなる。そこで、それ用の.htaccessを書いてみた。

docomoからのアクセスは、 サブディレクトリのiへ、softbankからのアクセスはサブディレクトリのvへ、auからは、サブディレクトリのeへ転送する。

すいません。下の.htaccessは間違えています。詳細は.htaccessの下に書いてあります。
order allow,deny
allow from all

AddType text/html .html

Options -Indexes

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} .+\.docomo\.ne\.jp$
RewriteRule ^(.+\.html)$ /i/$1 [L]

RewriteCond %{HTTP_HOST} .+\.jp\-[cdhknqrst]\.ne\.jp$
RewriteRule ^(.+\.html)$ /v/$1 [L]

RewriteCond %{HTTP_HOST} .+ezweb\.ne\.jp$
RewriteRule ^(.+\.html)$ /e/$1 [L]

セキュリティに関する内容なので、すべてを書き写してはいないが、RewriteEngine On以降が
URL振り分けの設定になる。

赤い枠の部分に書いてあるとおり、上の.htaccessは間違えています。申し訳ありません。

上で意図していたことを処理するには、%{HTTP_HOST}ではなく%{REMOTE_HOST}でした。

つまり、下の.htaccessが正しいのですが、それでも%{REMOTE_HOST}で携帯振り分けは
できない
みたいです。

order allow,deny
allow from all

AddType text/html .html

Options -Indexes

RewriteEngine On
RewriteBase /

RewriteCond %{REMOTE_HOST} .+\.docomo\.ne\.jp$
RewriteRule ^(.+\.html)$ /i/$1 [L]

RewriteCond %{REMOTE_HOST} .+\.jp\-[cdhknqrst]\.ne\.jp$
RewriteRule ^(.+\.html)$ /v/$1 [L]

RewriteCond %{REMOTE_HOST} .+ezweb\.ne\.jp$
RewriteRule ^(.+\.html)$ /e/$1 [L]

解決策としては、素直にUSER_AGENTで判定するのが手っ取り早いようです。
ただし、User Agentは偽装できるので、絶対に携帯からしかアクセスさせないとしたら、
これでもダメです。

#docomo
RewriteCond %{HTTP_USER_AGENT} DoCoMo [NC]
RewriteRule ^(.+\.html)$ /i/$1 [R]

#softbank
RewriteCond %{HTTP_USER_AGENT} (J-PHONE|Vodafone|SoftBank) [NC]
RewriteRule ^(.+\.html)$ /v/$1 [R]

#au
RewriteCond %{HTTP_USER_AGENT} UP\.Browser [NC]
RewriteRule ^(.+\.html)$ /e/$1 [R]

#smart phone
#RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android|BlackBerry) [NC]

そういったわけで、IPを逆引きしたかったのですが、ダメでした。
厳密に判定するには、.htaccessに携帯各社が公表しているIPを列挙するか、.htaccessでなく
スクリプトで判別する必要があります。

コメントを残す

Top