• ベストアンサー

モバイルの自動判別について

こんにちは。先日softbankを使っているお客様からモバイルサイトが見れないとクレームが入りました。 調べると、Softbank,vodafoneについても記述しないといけないようですが以下のCGIは以前に友人に作ってもらっていたもので 自分ではCGIの知識がない為上手く修正できません。 softbank携帯で見れるようにするには どう修正したらいいのでしょうか。 どうかよろしくお願いいたします。 (モバイルサイトは皆同じアドレスです) #!/usr/local/bin/perl $lct=''; ##Jaup 1 $jphone='J-PHONE'; $jjump='http://www.○○.biz/i/index.html'; #j-Phone用 ファイルアドレス指定 ##Jaup 2 $imode='DoCoMo'; $ijump='http://www.○○/i/index.html'; #i-MODE用 ファイルアドレス指定 #$ezmode='UP.Browser'; $ezjump='http://○○/i/index.html'; ## ユーザーエージェント $USR = $ENV{'HTTP_USER_AGENT'}; if ($USR =~ /$jphone/i) { $lct = $jjump;&go;} if ($USR=~ /$imode/i) { $lct = $ijump;&go;} if ($USR=~ /$ezmode/i) { $lct = $ezjump;&go;} $lct='http://www.○○.biz/index.html'; #パソコン用 ファイルアドレス指定 # &go; exit; sub go { print "Location: $lct\n\n"; } exit;

  • CGI
  • 回答数2
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • tsaito
  • ベストアンサー率68% (17/25)
回答No.1

Perlはよく分かりませんので、参考程度で $jphone='J-PHONE,vodafone,softbank'; と記述して ## ユーザーエージェント $USR = $ENV{'HTTP_USER_AGENT'}; の下ぐらいに @JP = split(/,/,$jphone); を追加 if ($USR =~ /$jphone/i) { $lct = $jjump;&go;} の行は、コメントアウトして、代わりに以下を追加 for($i = 0; $i <= $#JP; $i++){     if ($USR =~ /$JP[$i]/i) {         $lct = $jjump;         &go;     } } でいかがでしょうか。 おそらく、Perlに精通した方でしたら、もっと 単純なプログラムになると思います。

mokorobo
質問者

お礼

ありがとうございます。 試してみます。

その他の回答 (1)

  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

その作られた方に修正してもらうわけにはいかないのでしょうか。 とりあえず、Vodafone及びSoftBankのUAが何になっているかが ちょっと分からないので明確に答えられませんが $jphone='J-PHONE'; を $jphone='(J-PHONE|Vodafone|SoftBank)'; みたいな感じにすればいいじゃないでしょうか。 (Vodafone及びSoftBankのUAがそれぞれVodafone/SoftBankであった 場合) ただ、UAだけで判断する場合はUAは偽装したりできますしあまり 信頼性は高くないと思います。 その点はご注意ください。

mokorobo
質問者

お礼

ありがとうございます。解決いたしました!

関連するQ&A

  • INDXの振り分けでソフトバンク

    INDEXの振り分けにindex.cgiを設置していますが、ソフトバンクは PC画面になってしまいます。 $lct=''; $vodafone='vodafone'; $imode='DoCoMo'; $ezweb='UP.Browser'; #初期設定 ##Jaup先1 $vjump='./mi.html'; #Vodafone(j-Phone)用のファイルアドレスを指定 ##Jaup先2 $ijump='./mi.html'; #i-MODE用のファイルアドレスを指定 ##Jaup先3 $ejump='./mi.html'; #EZ WEB用のファイルアドレスを指定 ## ユーザーエージェントの判定 $USR = $ENV{'HTTP_USER_AGENT'}; #----------Vodafone版が不要の場合は行の頭に#を入れてpassさせてください if ($USR =~ /$vodafone/i) { $lct = $vjump;&go;exit;} #----------i-mode版が不要の場合は行の頭に#を入れてpassさせてください if ($USR=~ /$imode/i) { $lct = $ijump;&go;exit;} #----------ezweb版が不要の場合は行の頭に#を入れてpassさせてください if ($USR=~ /$ezweb/i) { $lct = $ejump;&go;exit;} $lct='./index.html'; #パソコン用のファイルアドレスを指定 &go; exit; sub go { print "Content-type: text/html\n\n"; open(IN, $lct); while (<IN>) { print; } close(IN); } exit; と書いてあるvodafoneの部分をSoftBankと変更するとうまく振り分けられるのですが、PCでアクセスすると携帯専用のindexへ飛んでしまいます。どうすればきちんと振り分けが出来るのでしょうか?

    • ベストアンサー
    • CGI
  • 振り分けcgiについて

    現在下記のように書かれているcgiでトップページの振り分けをしています。今までは各htmに飛ばしていたのですが、今度モバイルのみcgi へ飛ばしたいのですが、i.htmの部分をmi.cgiと書き換えてもうまく飛びません。どうしたらcgiへ飛ぶようになるのでしょうか? $vjump='.i.htm'; #SoftBank用 $ijump='./i.htm'; #i-MODE用 $ejump = './i.htm'; #EZWEB用 $pcjump = './index.htm'; #PC,その他 $USR = $ENV{'HTTP_USER_AGENT'}; if ($USR =~ /^DoCoMo/) { $lct = $ijump; } elsif ($USR =~ /UP\.Browser/) { $lct = $ejump; } elsif ($USR =~ /^SoftBank/ || $USR =~ /^Vodafone/ || $USR =~ /^J-PHONE/) { $lct = $vjump; } else { $lct = $pcjump; } &go; exit; sub go { print "Content-type: text/html\n\n"; open(IN, $lct); while (<IN>) { print; } close(IN); } exit;

    • 締切済み
    • CGI
  • 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
  • サイトが移動しました(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による端末振り分けについて

    宜しくお願いします。 現在は、PERLでPC・各携帯キャリアへの振り分けを行っております。ソースは・・・ #!/usr/bin/perl #index.cgi # #ジャンプ先の設定 # #iモード $imode = "http://www.****.jp/i/index.html"; #EZweb $ezweb = "http://www.****.jp/e/index.html"; #J-Sky $jsky = "http://www.****.jp/j/index.html"; #パソコン $pc = "http://www.****.jp/pc/index.html"; # #ブラウザ情報の取得 # $brwsr = $ENV{'HTTP_USER_AGENT'}; # #判別 # #iモードの判別 if ($brwsr =~ /DoCoMo/){ print "Location: $imode\n\n"; } #EZwebの判別 elsif ($brwsr =~ /UP.Browser/){ print "Location: $ezweb\n\n"; } #J-Skyの判別 elsif ($brwsr =~ /J-PHONE/){ print "Location: $jsky\n\n"; } #その他(パソコン) else { print "Location: $pc\n\n"; } exit; という形で自動振り分けをしておりますが、これと同じ機能をPHPで作るにはどうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • 携帯と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でエージェントの振り分けがうまくいかない 以下のように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
  • 携帯、スマートフォンの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ファイルを作りました。 そして各ホルダ 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
  • .htaccess Rewriteで携帯キャリア判別

    .htaccessのrewriteを使用して携帯キャリア判別をしています。 .htaccessの記述は、例えばdocomoの場合、 ************************** RewriteEngine On RewriteCond %{HTTP_USER_AGENT} DoCoMo RewriteRule ^$ http://www.hogehoge.com/i/index.html [R] ************************** として、http://www.hogehoge.com/にアクセスした場合、 /i/のディレクトリに移動するようにしています。 上記で.htaccessは正常に動いており、上述の様に http://www.hogehoge.com/のURLにimodeでアクセスすると確かに、 http://www.hogehoge.com/i/に移動しているのです。 ここからが質問なのですが、まったく同じ状況で、URLを http://www.hogehoge.com/index.html や、 http://www.hogehoge.com/content01.html http://www.hogehoge.com/content02.html など、ファイル名まで具体的に記述してアクセスすると、 /i/に移動せず、urlどおりのファイルがそのまま表示されてしまうのです。 希望としては、ファイル名にかかわらず、 http://www.hogehoge.com/ のディレクトリ内にimodeでアクセスした場合には、強制的に http://www.hogehoge.com/i/index.html に移動するようにしたいのです。 上述の.htaccessの記述でなにか、間違いがあるでしょうか? また、変更すべき点があるでしょうか? サイト内を色々と、見て回り、参考になるような事はしてみたのですが、いずれもうまくいかず、質問させて頂いています。 よろしく、ご教示下さい。