• 締切済み

日本からのアクセスと他国からのアクセスを判別したい

日本からアクセスされた場合、index_j.php 他国(日本以外)からアクセスされた場合、index_e.php というように、表示するページを切替えたいのですが、 どなたか手法をご教授下さいませ。 おそらく、接続先のドメイン?が、jpかそうでないかで判別するのではないかと想像していますが。 接続先情報が、ドメインじゃなくて、IPアドレスのような場合は、ダメなのかなぁと思っているので、完璧に振り分けるのは無理なのではないかとは思いますが・・・ よろしくお願い致します。

みんなの回答

  • MrYoYoYo
  • ベストアンサー率33% (38/115)
回答No.6

javascriptをご使用されてはいかがでしょう? 自分からアクセスしたページに対して、javascriptを使用しない設定にしているブラウザはたぶんないですし、IEとて、メッセージが表示されるだけなので、、、もしくはflashプレーヤーを使用してもいいかと思います。 方法としては、javascript等で接続してきた相手側のパソコンの時間を確認、その時間と日本の現在時間の誤差で、アクセスを切り分ける。 これなら、結構な精度かつ、無駄な切り捨てが少ないように思います。 事実、僕自身、完全に英語環境のOS、ブラウザを使用していますが、 時間設定だけは、今自分のいるところで設定してますで、、、 オーストラリア等の一部の地域では難しいですけど、、、、

THUBAN
質問者

お礼

結局、まだどの手法でも実現していませんが、かなり勉強になりました。 公平にポイント付けしないで締め切りさせてもらいましたが、皆さん、本当にありがとうございました。 またの機会にも、どうかよろしくお願い致します。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.5

発行されているIPアドレスをブロックすると言う手もありますが、情報が古いのと正確ではないので、最近の登録業者は見れないかもしれませんね・・・ http://www.nic.ad.jp/ja/dns/jp-addr-block.html http://www.iana.org/assignments/ipv4-address-space

THUBAN
質問者

お礼

ブロックしたいドメインは、一部だけわかります。 (IPはわかりません。引けばわけるのかもしれませんが・・・) できれば、ドメインで振り分ける方法も知りたいので、もしご存知でしたらご教授下さいませ。

THUBAN
質問者

補足

結局、まだどの手法でも実現していませんが、かなり勉強になりました。 公平にポイント付けしないで締め切りさせてもらいましたが、皆さん、本当にありがとうございました。 またの機会にも、どうかよろしくお願い致します。

  • DM9
  • ベストアンサー率37% (43/115)
回答No.4

度々どうも。 下の補足を読みました。 そういう事情ですか。とすれば、「完璧なものは必要ない」とおっしゃっているんで、それでも導入するということであればやはりHTTP_ACCEPT_LANGUAGEで判別する以上に精度の高い方法を私は思いつきません。でもご承知の通り、それでやったら、enを吐く環境の日本人には「クローズしました」というメッセージを見せてしまうことになってしまうわけで、彼らを100%きりすてることになってしまいます。少々ダサいやり方ですが、2byte文字か、jpg(またはgif)で、日本語のメッセージを載せておくとかでしょうか。 > ちなみに「一般的なブラウザ環境の中にはデフォルトでenしか吐かないものが多く存在する」 というのは、IEでもネスケでもFフォックスでもでしょうか? すみませんが、そのご質問には正確には答えられません。というのは、私も以前同様の自動振り分けを試みたことがあり、それでいろいろと調べていてそのような事例をいくつか見、あきらめたという経緯があるんだったのでした。ずいぶん前のことなのでそのとき集めた資料等出てきませんし、記憶もあいまいです。お答えできなくてすみません。ただそういう事例が私には無視できないほどの一定確率であるのだなということは明確に記憶していますので先のように回答しました。

THUBAN
質問者

お礼

結局、まだどの手法でも実現していませんが、かなり勉強になりました。 公平にポイント付けしないで締め切りさせてもらいましたが、皆さん、本当にありがとうございました。 またの機会にも、どうかよろしくお願い致します。

THUBAN
質問者

補足

わかりました。 どうもありがとうございます。 完璧なものが欲しいところですが、やはり完璧なものは難しいだろうなぁと想像はつきます。 「2byte文字か、jpg(またはgif)で、日本語のメッセージを載せる」 という方法は、ナイスアイデアかもしれません。 他国の人(日本語が理解できない)から見たら、単なる広告バナーのように見えるように画像張り付けて対応してみたいと思います。

回答No.3

英語環境のチェックをする場合は No.2で、補足がありますが、書いてしまったので(笑) Internet Explorer [ツール(T)]-[インターネットオプション(O)...]-[全般タブ]-[言語(L)...] を開き、日本語[ja]を削除し、希望の言語を選択すれば HTTP_ACCEPT_LANGUAGEの値をenに変更することができます。 動作チェックが終わったら、日本語[ja]を設定に戻してくださいね。 この方法で動作チェックを行ってみてください。 また、WindowsかMacOSかの判断ですが、 ブラウザ環境変数のHTTP_USER_AGENTを参照しますと ブラウザのバージョンやOSなどが判別できます。 一例ですが --------------------------------------------------- Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) --------------------------------------------------- という値であれば Microsoft InternetExplorer 6.0 WindowsXP Professionalを利用していることがわかります。 Macを持っていませんが、Macでアクセスすると MAC OS やMac_PowerPCという文字列が含まれているようです。 No.1でご提案したスクリプトを改造していただければ 判別に利用できるかと思います。 <?php $strUserAgent = $_ENV['HTTP_USER_AGENT']; if( ereg(".*Windows.*",$strUserAgent) ){ echo "Windowsをご利用ですね。<BR>\n"; }elseif( ereg(".*(MAC OS|Mac_PowerPC).*",$strUserAgent) ){ echo "Macをご利用ですね。<BR>\n"; }else{ echo "私の知らないOSをご利用ですね。<BR>\n"; } if( ereg(".*MSIE.*",$strUserAgent) ){ echo "さらに、Microsoft InternetExplorerをご利用ですね。<BR>\n"; }else{ echo "さらに、私の知らないブラウザをご利用ですね。<BR>\n"; } ?> すみません、動作チェックを一切行ってませんのでエラーになるかもしれません。 DM9さんがおっしゃる通り、ページにアクセスした際に英語ページか日本語ページを選ばせるのが良いですね。

THUBAN
質問者

お礼

結局、まだどの手法でも実現していませんが、かなり勉強になりました。 公平にポイント付けしないで締め切りさせてもらいましたが、皆さん、本当にありがとうございました。 またの機会にも、どうかよろしくお願い致します。

THUBAN
質問者

補足

どうもありがとうございます。 OSの判定方法はわかりました。 ただ、そのOS(Windowsにしろ、Macにしろ)が日本語OSなのか、そうでない他国語OSなのか判定させるのは無理なのでしょうかね?

  • DM9
  • ベストアンサー率37% (43/115)
回答No.2

ドメインで判別するのはNo.1さんが述べられている通り、不完全なのでダメ。またHTTP_ACCEPT_LANGUAGEで判断する方法も残念ながら満足する結果を得られません。詳しくは触れませんが、一般的なブラウザ環境の中にはデフォルトでenしか吐かないものが多く存在するからです。 一般的な話、日本人がウェブサイトにアクセスし、英語ページが一発目で出てくるとほとんどの場合、戻るボタンで戻ってしまうのではないでしょうか。そのページのどこかに「日本語はこちら」というリンクがあったとしてもそこに目がいく確率は低いでしょう。つまり、ビジターのためによかれと思って作ったシカケが逆にアクセシビリティを悪化させてしまうのです。 要は質問者さんの考え方次第です。上記の欠点をふまえた上で、それでも導入した方がよいケースがあるかもしれません。 例えばコンピュータの技術的な事柄に特化したウェブサイト(apacheのモジュール類配布サイトとか)なら、訪問者のほとんどは英語の用語に馴れているので、いきなり英語が出てきても嫌悪を覚える人はいないでしょう。右上に「日本語はこちら」というリンクがあればそれを探してクリックしてくれるでしょう。そういうサイトなら見る人たちはブラウズの仕方をある程度知っているからです。彼らのような訪問者ばかりなら、en/ja切り替えが不完全だったとしてもさほど不便には思わないかもしれません。 また、そのページに書かれた情報がたいへん貴重で訪問者はある程度の動機によって支えられており、英語ページであったとしても熱心に読んでくれる、あるいは日本語ページへのリンクを積極的に探してくれるというのなら導入してもよいかもしれません。 しかしながら、一般的な商用サイトでこれをやるのはディレクションミスだと思います。jaを吐くブラウザ環境には便利ですが、enを吐くブラウザ環境のお客様に不便を強いることになります。 上記を踏まえた上でいちばんの方策はこれだと思います↓ 最初は手動でen.php/ja.phpを選ばせる。2度目の訪問以降はcookieで自動でそれぞれのページに飛ばす。 以上私見ですが参考まで。

THUBAN
質問者

お礼

結局、まだどの手法でも実現していませんが、かなり勉強になりました。 公平にポイント付けしないで締め切りさせてもらいましたが、皆さん、本当にありがとうございました。 またの機会にも、どうかよろしくお願い致します。

THUBAN
質問者

補足

おっしゃるとおりだと思います。 ただ、実際に必要としているページはちょっと違っていて、 日本語ページと国外向け英文ページの両方を作りたいのではなくて、 日本からのアクセス者だけに、サイトを普通に閲覧できるようにさせて、 海外からのサクセス者には、サイトはクローズしたというメッセージを書いたページを出したいのです。 (別にあやしいサイトではまったくないのですが、ちょっと海外からの訪問者を避けたいわけがありまして・・) ですので、両方のページが存在するということを海外からの訪問者にはできれば知られたくないのです。 よって、トップで自動的に振り分けたいのです。 完璧なものは無理だとは思いますが・・・ ちなみに「一般的なブラウザ環境の中にはデフォルトでenしか吐かないものが多く存在する」 というのは、IEでもネスケでもFフォックスでもでしょうか? それとも、ブラウザヴァージョン(古い?)によっては、enしか吐かないということでしょうか?

回答No.1

THUBANさんがおっしゃっているように、ドメインで判別するのも一つの方法ですが プロバイダによっては YahooBBのように.netドメインを使っていたり.comだったりします。 ブラウザ環境変数のHTTP_ACCEPT_LANGUAGEを取得してjaが入っていれば index_j.php に。それ以外の値が入っていれば index_e.phpに飛ばす方法は どうでしょうか。 HTTP_ACCEPT_LANGUAGEはブラウザのサポート言語を表します。 まれに、日本語環境のブラウザでも ja en と値が二つ入っている場合もあります。 参考になればいいのですが。。。 <?php $strAcceptLanguage = $_ENV['HTTP_ACCEPT_LANGUAGE']; $strUrlJapanese = "http://xxx.xxx.xxx/index_j.php"; $strUrlOther = "http://xxx.xxx.xxx/index_e.php"; if( ereg(".*ja.*",$strAcceptLanguage) ){ Header("Location: {$strUrlJapanese}"); }else{ Header("Location: {$strUrlOther}"); } ?>

THUBAN
質問者

お礼

結局、まだどの手法でも実現していませんが、かなり勉強になりました。 公平にポイント付けしないで締め切りさせてもらいましたが、皆さん、本当にありがとうございました。 またの機会にも、どうかよろしくお願い致します。

THUBAN
質問者

補足

ありがとうございます。 なるほど!ブラウザで判別すればいいんですね。 ちょっとやってみたいと思います。 ただ、英語環境が手元にないので、きちんと動作しているかテストするには何かしらの方法を考えないといけないですね。 ちなみに、OS(WindowsやMac)が日本語か、そうでないかを判断することも可能なのでしょうか?

関連するQ&A