• ベストアンサー

同じURLでPCとi-mode

CGIを使ってPCとi-modeの異なる環境で HPを表示させたいのですが、どのようにすれば いいのでしょう・・? なるべくcgiにPC用とi-mode用を埋め込まず cgiが環境に合わせたhtmlを読みに行くような形に したいのですが、、、(SSI?)

  • CGI
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
noname#25358
noname#25358
回答No.2

 JavaScript を使う技は、端末に JavaScript が入っていることが前提なのでおすすめできません。  ネチケッチ違反ですし(^_^;  で、それだと、下記のようなCGIを用意するのが一番いいでしょう。  本当はアパッチのネゴシエーションが使えればそれが一番なんですけどね。CGIは重いし(^_^; ファイル名:index.cgi ------------------------------○ #!/usr/local/bin/perl $browser=$ENV{'HTTP_USER_AGENT'}; $browser=~s/\/.*$//; if($browser =~ /^docomo$/i ){ print "Location: http://wwwwwwww/"; #i-mode } else { print "Location: http://wwwwwwww/"; #other } ------------------------------○  で、これでiモードだけを #i-mode の行のURLへとばします。このとき、Location: のあとに来る文字列は必ず http: から始まっている必要があります。  i-mode 以外のブラウザは無条件で #other の方へ飛びます。  また、1行目は問題があるようであれば書き換えてください。  もちろん、.htaccess に DirectoryIndex index.cgi  という記述が可能であるか、でなければ  または DirectoryIndex index  という設定がプロバイダ側でやってあることが前提ですのでお気を付けを。  プログラムが何やってるのか分からなければ、簡単にでよければ解説しますんで、そのときは補足ください。  ただし、iモードが Location: を認識するかどうか分からないので、503i以前のiモードを持っているのであれば実際に動くかどうかテストしてみてください。

makihiro
質問者

お礼

ありがとうございました。m(_ _)m まさにこの記述ですね! USER_AGENTでif文を使えば良かったのですね。 ところでアパッチのネゴエーションというのはどのようなものでしょうか・・・?

その他の回答 (3)

noname#25358
noname#25358
回答No.4

 補足です。  ネゴシエーションについてですが、これは、条件によって表示するページを変える設定のことです。  たとえば、日本人には日本語で、中国人には中国語でコンテンツを提供する、というようなこともできます。  ブラウザの設定に「言語の優先順位」というようなものがあるのを見たことがあると思いますが、あれがそうです。  俺は少なくとも言語による区別しかみたことがありませんけど、アパッチのバージョンが上がればブラウザによってページを変えたりもできるようになるかもしれません。  なお、アパッチというのはホームページを表示するためのサーバー側プログラムの一種で、現在もっとも一般に普及しているものです。

makihiro
質問者

お礼

補足ありがとうございます。 現在のapacheではブラウザによる表示ページのネゴエーションは無いんですね。 UNIX系ではapacheが普及しすぎてapache以外のデーモンはほとんど耳にしないですねー。

makihiro
質問者

補足

すみません。また教えてください。 CGIの方がどうしてもサーバエラーになってしまうので .htaccessで order allow,deny allow from all deny from 210.153.84. ErrorDocument 403 http://ドメイン名/i.html このように記述してi-modeのIPをdenyし、403ページを i-mode用のメニューにするように考えたのですが、 アクセスに妙に時間がかかってしまいます。 やはりこれは問題でしょうか。。。

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.3

私はUSER_AGENTでPCとi-modeを判別して、それぞれのHTMLファイルを読み込んで表示…としています。 if ($agent eq 'i') {     if(!open(IN, "$iFile")) {     $Date = join('',<IN>);     close(IN);     $len = length($Date);     print "Content-type: text/html\n";     print "Content-length: $len\n";     print "\n";     print $Date; } else {     if(!open(IN, "$pcFile")) {     $Date = join('',<IN>);     close(IN);     print "Content-type: text/html\n\n";     print $Date; } 別にjoin()を使わなくても1行ずつ読み込んで表示するのでも良いと思いますが、これは私の癖みたいなもんです(^^;

makihiro
質問者

お礼

ありがとうございました。m(_ _)m 早速実戦してみます。

回答No.1

CGIではありませんが、JavaScriptでブラウザ名を問い合わせ、IEとNN以外ならケータイ用ページに飛ばす、という技は聞いたことがあります。

makihiro
質問者

お礼

早速のご回答ありがとうございます。 JavaScriptがオフだとi-modeページになっちゃいますね・・・?

関連するQ&A