プロが教えるわが家の防犯対策術!

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

A 回答 (4件)

 補足です。



 ネゴシエーションについてですが、これは、条件によって表示するページを変える設定のことです。
 たとえば、日本人には日本語で、中国人には中国語でコンテンツを提供する、というようなこともできます。
 ブラウザの設定に「言語の優先順位」というようなものがあるのを見たことがあると思いますが、あれがそうです。

 俺は少なくとも言語による区別しかみたことがありませんけど、アパッチのバージョンが上がればブラウザによってページを変えたりもできるようになるかもしれません。

 なお、アパッチというのはホームページを表示するためのサーバー側プログラムの一種で、現在もっとも一般に普及しているものです。

この回答への補足

すみません。また教えてください。
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用のメニューにするように考えたのですが、
アクセスに妙に時間がかかってしまいます。
やはりこれは問題でしょうか。。。

補足日時:2001/08/13 12:12
    • good
    • 0
この回答へのお礼

補足ありがとうございます。
現在のapacheではブラウザによる表示ページのネゴエーションは無いんですね。

UNIX系ではapacheが普及しすぎてapache以外のデーモンはほとんど耳にしないですねー。

お礼日時:2001/08/09 14:39

私は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行ずつ読み込んで表示するのでも良いと思いますが、これは私の癖みたいなもんです(^^;
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/08/09 11:58

 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モードを持っているのであれば実際に動くかどうかテストしてみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/08/09 11:56

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2001/08/09 11:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!