こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

【PHP・.htaccess】PCと携帯の振り分けについて

【PHP・.htaccess】PCと携帯の振り分けについて

お世話になります。

PHP・.htaccess共に初心者なのですが、
PCサイトと携帯サイトの振り分けで悩んでいるので宜しくお願い致します。


現在の構成が

http://sample.com/←トップページ(PHPファイルのみ。各トップへ振り分け)
http://sample.com/pc/←PCトップページ
http://sample.com/mo/←モバイルトップページ(.htaccessでIP制限。PCからのアクセスはトップへ)

----------------------------------------------------
振り分けPHP(http://sample.com/


<?php
$agent = $_SERVER['HTTP_USER_AGENT'];
if(preg_match("/^DoCoMo/i", $agent)){
header("Location: http://sample/mo/");
exit;
}else if(preg_match("/^(J-PHONE|Vodafone|MOT-[CV]|SoftBank)/i", $agent)){
header("Location: http://sample/mo/");
exit;
}else if(preg_match("/^KDDI-/i", $agent) || preg_match("/UP.Browser/i", $agent)){
header("Location: http://sample/mo/");
exit;
}else{
header("Location: http://sample/pc/");
exit;
}

----------------------------------------------------

となって居ますが、都合により


http://sample.com/←PCトップ モバイルからのアクセスはmoに振り分け。
http://sample.com/mo/←モバイルトップページ。(.htaccessでIP制限。PCからのアクセスはトップへ)


上記の形に切り替えたいと思っています、
PHPを使って振り分けをしたいと思っているのですが、
上記の形を再現する事は出来ますでしょうか?

また、.htaccessを利用する事により解決が出来るのであれば、
そちらもご教授いただけると幸いです。

投稿日時 - 2010-07-28 16:33:51

QNo.6070597

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(4)

PHPでは一部不可能と思います。

.htaccessで

RewriteEngine on
RewriteCond %{REQUEST_URI} !/mo/
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo [OR]
RewriteCond %{HTTP_USER_AGENT} ^KDDI [OR]
RewriteCond %{HTTP_USER_AGENT} ^SoftBank
RewriteRule ^(.*)$ /mo/ [R=302,L]

RewriteCond %{REQUEST_URI} /mo/
RewriteCond %{HTTP_USER_AGENT} !^DoCoMo
RewriteCond %{HTTP_USER_AGENT} !^KDDI
RewriteCond %{HTTP_USER_AGENT} !^SoftBank
RewriteRule ^(.*)$ / [R=302,L]

RewriteRule ^$ /pc/ [L]

と思います。

これで動作するなら、振り分け用のPHPファイルは不要です。
http://sample.com/pc/ではなく、http://sample.com/にPCのトップページを作ったほうが良いのでは?と思います。

http://sample.com/にPCのトップページを作った場合のhtaccessは、

RewriteEngine on
RewriteCond %{REQUEST_URI} !/mo/
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo [OR]
RewriteCond %{HTTP_USER_AGENT} ^KDDI [OR]
RewriteCond %{HTTP_USER_AGENT} ^SoftBank
RewriteRule ^(.*)$ /mo/ [R=302,L]

RewriteCond %{REQUEST_URI} /mo/
RewriteCond %{HTTP_USER_AGENT} !^DoCoMo
RewriteCond %{HTTP_USER_AGENT} !^KDDI
RewriteCond %{HTTP_USER_AGENT} !^SoftBank
RewriteRule ^(.*)$ / [R=302,L]

と思います。

参考URL:http://xn--u8jxb9ib9150b2px.jp/htaccess/rewritepcmobile.html

投稿日時 - 2010-08-16 18:24:01

ANo.3

>URL表示が【http://sample/】のままで、pcのトップページを表示して、モバイルは【http://sample/mo/】に転送したいと思っています。

PCフォルダを作らず、携帯のみを振り分けたらいけるんじゃない?

投稿日時 - 2010-07-28 20:52:21

ANo.2

UserAgent名はたやすく偽装出来るけど、IPアドレスの偽装は困難なので、
PHPではなにもせず、htaccessだけを使って
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
Options -Indexes
DirectoryIndex index.php
ErrorDocument 406 /sample.com/mo/
order deny,allow
#docomo
deny from 210.153.84.0/24
deny from 210.136.161.0/24
deny from 210.153.86.0/24
deny from 124.146.174.0/24
deny from 124.146.175.0/24
#ezweb
deny from 210.230.128.224/28
deny from 121.111.227.160/27
deny from 61.117.1.0/28
deny from 219.108.158.0/27
deny from 219.125.146.0/28
deny from 61.117.2.32/29
deny from 61.117.2.40/29
deny from 219.108.158.40/29
deny from 219.125.148.0/25
deny from 222.5.63.0/25
deny from 222.5.63.128/25
deny from 222.5.62.128/25
deny from 59.135.38.128/25
deny from 219.108.157.0/25
deny from 219.125.145.0/25
deny from 121.111.231.0/25
deny from 121.111.227.0/25
deny from 118.152.214.192/26
deny from 118.159.131.0/25
deny from 118.159.133.0/25
deny from 118.159.132.160/27
deny from 111.86.142.0/26
deny from 111.86.141.64/26
deny from 111.86.141.128/26
deny from 111.86.141.192/26
deny from 118.159.133.192/26
#softbank
deny from 1123.108.237.0/27
deny from 1202.253.96.224/27
deny from 1210.146.7.192/26
deny from 1210.175.1.128/25

投稿日時 - 2010-07-28 18:51:11

ANo.1

<?php
$agent = $_SERVER['HTTP_USER_AGENT'];
if(preg_match("/^DoCoMo/i", $agent)){
header("Location: http://sample/mo/");
exit;
}else if(preg_match("/^(J-PHONE|Vodafone|MOT-[CV]|SoftBank)/i", $agent)){
header("Location: http://sample/mo/");
exit;
}else if(preg_match("/^KDDI-/i", $agent) || preg_match("/UP.Browser/i", $agent)){
header("Location: http://sample/mo/");
exit;
}else{
include "pc用のインデックスページ.htm";
exit;
}

としてみては?

投稿日時 - 2010-07-28 16:53:11

補足

早速の回答ありがとうございます。

やや説明不足でしたので補足させて頂きます。
教えて頂きました方法だと、
http://sample/】にアクセスした際、
URLの表示が【http://sample/pc用のインデックスページ.htm】
となってしまうと思うのですが、URL表示が【http://sample/】のままで、
pcのトップページを表示して、モバイルは【http://sample/mo/】に転送したいと思っています。

その様な事は可能でしょうか?

投稿日時 - 2010-07-28 17:08:39

あなたにオススメの質問