• 締切済み

【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を利用する事により解決が出来るのであれば、 そちらもご教授いただけると幸いです。

  • PHP
  • 回答数4
  • ありがとう数3

みんなの回答

noname#116331
noname#116331
回答No.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
  • godcase
  • ベストアンサー率33% (4/12)
回答No.3

>URL表示が【http://sample/】のままで、pcのトップページを表示して、モバイルは【http://sample/mo/】に転送したいと思っています。 PCフォルダを作らず、携帯のみを振り分けたらいけるんじゃない?

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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; } としてみては?

oaxaka
質問者

補足

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

関連するQ&A

  • 携帯とPCの振り分け

    同じドメインにて携帯とPCの振り分けなのですが、htaccessにて振り分けたのですが、ブラウザに「振り分けがループしています」とでるのですが、 これはなぜでしょう? htaccessの中身の内容ですが、 DirectoryIndex index.php index.html index.htm これで読み込んだindex.phpの中身は <?php $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ header("Location: http://www.○○○○○.com/mobile/index.xhtml"); exit; }else if(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i", $agent)){ header("Location: http://www.○○○○○.com/mobile/index.xhtml"); exit; }else if(preg_match("/^KDDI\-/i", $agent) || preg_match("/UP\.Browser/i", $agent)){ header("Location: http://www.○○○○○.com/mobile/index.xhtml"); exit; }else{ header("Location: http://www.○○○○○.com/"); exit; } ?> サーバはlolipopでhtaccessのパーミッションは604で phpのパーミッションは700です。

    • 締切済み
    • CGI
  • 携帯、スマートフォンのPHP振り分け

    こんなPHPを書いているのですが どうしてもParse errorが出ます。 解決方法を教えて下さい!! ■エラー内容 Parse error: syntax error, unexpected T_EXIT in /home/sites/heteml/users/web/m/index.php on line 5 ■振り分けPHP <?php $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ header("Location: ​http://www.hogehoge.com/m/i/index.html");​ exit; }else if(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i", $agent)){ header("Location: ​www.hogehoge.com/m/s/index.html");​ exit; }else if(preg_match("/^KDDI\-/i", $agent) || preg_match("/UP\.Browser/i", $agent)){ header("Location: ​www.hogehoge.com/m/e/index.html");​ exit(); }else if(preg_match("iPhoneやスマートフォン用の判定", $agent)){ header("Location: www.hogehoge.com/m/smt/index.html"); exit(); }else{ header("Location: ​www.hogehoge.com/m/pc/index.html");​ exit(); } ?> よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpでエージェントの振り分けがうまくいかない

    phpでエージェントの振り分けがうまくいかない 以下のようにmフォルダの中にindex.phpを以下の内容で設置し、同列でi,a,sフォルダを設け それぞれindex.htmlを設けました。しかし携帯でhttp://hoge.com/m で打つとサイトがみつかりませんになります。<?phpより上は空白、改行はありません。 振り分けがうまく機能しないのはなぜでしょうか? <?php $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ header("Location: http://hoge.com/m/i/index.html"); exit; }else if(preg_match("/^(J?-PHONE|Vodafone|MOT?-[CV]|SoftBank)/i", $agent)){ header("Location: http://hoge.com/m/s/index.html"); exit; }else if(preg_match("/^KDDI?-/i", $agent) || preg_match("/UP?.Browser/i", $agent)){ header("Location: http://hoge.com/m/a/index.html"); exit; }else{ header("Location: http://hoge.com/index.php"); exit; } ?>

    • ベストアンサー
    • PHP
  • サイトが移動しました(301)が出てしまいます。

    以下のようにキャリア判別しましたが、ドコモ(f706i) でみるとサイトが移動しました(301)が出ます。 これはなんとかならないんでしょうか? <?php $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ header("Location: ​http://sample.com/i/index.html");​ exit; }else if(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i", $agent)){ header("Location: ​http://sample.com/s/index.html");​ exit; }else if(preg_match("/^KDDI\-/i", $agent) || preg_match("/UP\.Browser/i", $agent)){ header("Location: ​http://sample.com/e/index.html");​ exit; }else{ header("Location: ​http://sample.com/pc/index.html");​ exit; } ?>

    • ベストアンサー
    • PHP
  • 携帯ユーザーのPHPによる振り分け

    WindowsXP dreamweaverCS3を使用 PHPの知識はまったくありません。 PCサイト「www.deri6mon.com」(PC用サイト)がすでにできており、 これをQRコードに変換してあります。 そのQRコードをユーザーがスマホと携帯のバーコードリーダーで変換し、 PCサイトにアクセスさせますが、携帯ユーザーは当然容量がオーバーしますので エラーでとまってしまいます。 そこで、別に携帯サイトを用意してPCサイトにアクセスしてきた携帯ユーザーを 携帯サイトに自動で振り分けたいと考えています。 PCサイトの最上部に下記を記述しました。 PHPを書き込んだファイルはhtml→phpに拡張子を変換してあります。 -----------------ここから------------------- <?php $page_m='http://www.deri6mon.com/mb/index.html'; $agent=$_SERVER['HTTP_USER_AGENT']; if (preg_match("/UP\.Browser\/[3-5]/",$agent) || preg_match("/J-PHONE\//",$agent) || preg_match("/DoCoMo\//",$agent) && !(preg_match("/(Win|Mac|Linux|FreeBSD|OS¥/2|Solaris)/i",$agent)) || preg_match("/UP.Browser/",$agent) || preg_match("/^Vodafone/",$agent) || preg_match("/^SoftBank/",$agent) || preg_match("/^MOT-/",$agent) || preg_match("/DDIPOCKET;/",$agent) || preg_match("/WILLCOM;/",$agent) || preg_match("/L-mode\/\//",$agent)) { header("Location: $page_m"); }else{ }//end if ?> -----------------ここまで---------------- しかしどうしても携帯でPCサイトが表示されてしまいます。 どこの設定(記述)をどうしたら良いのでしょうか。 因みにhttp://emu.mobile.goo.ne.jp/emu/emu.phpでPCサイトのアドレスを入れると携帯サイトのTESTが表示されるので記述は問題ないと思います。 教えてgooの過去Qを調べてみて気がついた記述が、私が使っているサーバーは 自動で挿入される広告があり「header Locationはエラーになる」というのが ありました。 これを回避するにはどうすればいいのでしょうか? PHPの知識が無いのでわかりやすく回答していただけるとたすかります。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • i Phone 用振り分け

    以下のように携帯キャリアごとに振り分け、3キャリア以外は PCフォルダに振り分けるようにした場合ですが、PCフォルダの方で i Phone 用に幅480pxで作成したページを配置すると PCから http://mypage.net/ でアクセスしたユーザーにも i Phone 用の幅480pxページを見せるようになってしまいますか? i Phoneやスマートフォンの対処はどうされているんでしょうか? <?php $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ header("Location: http://mypage.net/i/index.html"); exit; }else if(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i", $agent)){ header("Location: http://mypage.net/s/index.html"); exit; }else if(preg_match("/^KDDI\-/i", $agent) || preg_match("/UP\.Browser/i", $agent)){ header("Location: http://mypage.net/e/index.html"); exit; }else{ header("Location: http://mypage.net/pc/index.html"); exit; } ?>

    • ベストアンサー
    • PHP
  • ユーザーエージェントの振り分け

    すみません、エージェント振り分けで以下のようにPHPファイルを作りました。 そして各ホルダ i,s にindex.htmlを配置したところ Warning:Cannot modify header information headers already sent by (output started at /home/lolipop,jp-dp44253830/web/mobile/index.php:1) in/home/sites/lolipop.jp/users/lolipop.jp-dp44253830/web/mobile/index.php on line 4 index.php <?php $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ header("Location: http://homepege.net/mobile/i/index.html"); exit; }else if(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i", $agent)){ header("Location: http://homepage.net/mobile/s/index.html"); exit; 省略 } ?> お手数ですが教えてください。

    • ベストアンサー
    • PHP
  • PCと携帯サイトの振分け後の表示アドレスについて

    こんにちは。 私はPHPを利用して、同じアドレス(http://****.com)から携帯とPCを判別して区別しています。 しかし、PCからアクセスした場合は、表示が(http://****.com)となるのですが、携帯からアクセスすると(http://****.com/mobile)のようになってしまいます。 携帯からアクセスした場合でも(http://****.com)と表示させたいのですが、どのようにすればよいのでしょうか。 以前、質問した時は、一つのPHPファイルにPCと携帯二つ分の内容を書いて、どちらかを吐き出す処理を行えばよいとアドバイスをいただきましたが、私の携帯サイトはオリジナルで作成したものではなく、起業からレンタルしているものなのです。 (http://****.com/mobile)というアドレスが与えられるだけのものです。 ですから、自分のオリジナルPCサイトの内容に取り込む事が出来ません。 以下は私の振分けのやり方です。 http://blogn.hustle-user.com/e66.html こちらのサイトを参考にPHPで作成しています。 index.php(http://****.com/でまずここにアクセスします。) <?php $title="http://****.com/mobile"; $page_e='http://****.com/mobile'; $page_j='http://****.com/mobile'; $page_i='http://****.com/mobile'; (↑これら携帯のアドレスにリダイレクトさせてアドレス表示を(http://****.com)にしたいのです。) $i=$_SERVER['HTTP_USER_AGENT'];   $pc='http://****.com/index.html'; (↑PCはこれで上手く(http://****.com)と表示されています。) require_once('data/furiwake.txt'); ?> furiwake.txt(上記のリンク先です) <?php //HDML記述のezweb端末? if (preg_match("/UP\.Browser\/[3-5]/",$i)) { header('Content-Type: text/x-hdml;charset=shift_jis'); echo('<hdml version="3.0" markable="TRUE" public="TRUE">'); echo('<nodisplay markable="TRUE" public="TRUE" title="'.$title.'">'); echo('<action type="ACCEPT" task="GO" dest="'.$page_e.'">'); echo('</nodisplay>'); echo('</hdml>'); exit(); } //SoftBank以前の端末? if (preg_match("/J-PHONE\//",$i)) { header("Location: $page_j"); exit(); } //iモード/EZウェブ次世代機/エアーH"フォンなどの携帯端末一般。 if (preg_match("/DoCoMo\//",$i) || preg_match("/Opera[s\/]/",$i) && !(preg_match("/(Win|Mac|Linux|FreeBSD|OS/2|Solaris)/i",$i)) || preg_match("/UP.Browser/",$i) || preg_match("/^Vodafone/",$i) || preg_match("/^SoftBank/",$i) || preg_match("/^MOT-/",$i) || preg_match("/DDIPOCKET;/",$i) || preg_match("/WILLCOM;/",$i) || preg_match("/L-mode\/\//",$i)) { header("Location: $page_i"); exit(); } else { require_once($pc); exit(); } ?> どなたかPHPに詳しい方、恐れ入りますが回答お願いします。

    • 締切済み
    • PHP
  • .htaccessで携帯サイトとPCサイトの振り分けについて

    .htaccessで携帯サイトとPCサイトの振り分けについて お世話になります。 .htaccessで携帯サイトとPCサイトの振り分けで困っています。 現在、index.phpで携帯サイトとPCサイトの振り分けしています。この場合、PCサイトのトップページがindex.htmlではなく他の名前にしなくてはならないようで、現在はpc.htmlにしています。 どうにかpc.htmlではなく、index.htmlのまま携帯サイトとPCサイトの振り分けをしたいのです。 .htaccessであればできそうなので、いろいろと調べながら試したのですがうまくいきませんでした。 使用しているサーバーはさくらのレンタルサーバーで、ライトプランです。 mod_rewriteは入ってると記載してありました。.htaccessもOKなようです。 以下のように.htaccessファイルに記述して試しました。 例1) RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^DoCoMo [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} ^J-PHONE [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Up.Browser [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^ASTEL [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^DDIPOCKET [NC] RewriteRule ^$ abc.com/m/ [R] 例2) Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_USER_AGENT} DoCoMo RewriteRule ^$ http://www.abc.com/m/index.html [R] RewriteCond %{HTTP_USER_AGENT} J-PHONE RewriteRule ^$ http://www.abc.com/m/index.html [R] RewriteCond %{HTTP_USER_AGENT} UP.Browser RewriteRule ^$ http://www.abc.com/m/index.html [R] 素人ですので、できましたら記述全文教えていただけるとありがたいです。 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • 携帯とPC振り分け

    現在PCサイトを作っています。 携帯からアクセスがあった場合に振り分け(?)したいと思っていて、現在ソースがこんなかんじです。 .htaccessに DirectoryIndex index.php index.cgi index.html index.shtml と書いてあって、 <?php $mobile = print <<<MOBILE <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <title>携帯には対応していません(HPタイトル)</title> </head> <body> 携帯には対応していません。(HPタイトル) </body> </html> MOBILE; if(isset($_SERVER['HTTP_USER_AGENT'])){ $user_agent = $_SERVER['HTTP_USER_AGENT']; if(eregi("DoCoMo",$user_agent)){$mobile;exit;} else if(eregi("UP\.Browser",$user_agent)){$mobile;exit;} else if(eregi("J-PHONE",$user_agent)){$mobile;exit;} else if(eregi("Vodafone",$user_agent)){$mobile;exit;} else if(eregi("mobile",$user_agent)){$mobile;exit;} else if(eregi("J-EMULATOR",$user_agent)){$mobile;exit;} else{header("Location: index.html");exit;} }else{ print <<<END <html><body> HTTP_USER_AGENT Error<br /><br /> ユーザーエージェントが読み込めませんでした。<br /> </body></html> END; } ?> こんな感じです。 ですが、エラーはいてしまいます。 Warning: Cannot modify header information - headers already sent by (output started at D:\XAMPP\htdocs\index.php:16) in D:\XAMPP\htdocs\index.php on line 26 こんな感じです。 まったくのPHP初心者(HTMLはまあまあわかる)なので だいぶソースが間違っていると思います。 このPHPのソースは携帯サイトnet(http://www.keitai-site.net/)からいただきました。

    • ベストアンサー
    • PHP