• 締切済み

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

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

  • THUBAN
  • お礼率76% (771/1002)
  • PHP
  • 回答数6
  • ありがとう数8

みんなの回答

  • 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

  • IPとドメインのどちらでアクセスしたかを判別

    Apacheのログ等で、 ウェブサイトに、IPアドレスを指定してアクセスしてきたか、 ドメインを指定してアクセスしてきたかを判別する事は可能でしょうか? すでに運用中のサーバ上で、 IPアドレスを直接入力してアクセスしているユーザが何人いるか調べたいです。

  • 判別不可とは?

    アクセス解析のドメインに判別不可と 表示される場合がありますが、なぜですか?

  • httpルートへのアクセスはサーバーがいないようなフリをさせたいです。

    httpルートへのアクセスはサーバーがいないようなフリをさせたいです。 httpサーバはapache互換です。 以下のような配置があるとします。 httpルート | +ーdira   index.html   page1.html ブラウザから、 下記の入力で正しくページを表示。 http://ドメイン/dira http://ドメイン/dira/index.html http://ドメイン/dira/page1.html http://IPアドレス/dira http://IPアドレス/dira/index.html http://IPアドレス/dira/page1.html 下記の入力、つまりhttpルートへのアクセスがあった場合、あたかもサーバが存在しないような、でたらめな誤ったドメイン(またはIP)を入力した時と同じリアクションを返す事はできますか? http://ドメイン/ http://IPアドレス/ httpd.confの設定でできませんか?

  • index.phpをindex.htmlにしたい

    htmlをphpとして動かすのではなく、拡張子がphpのものをhtmlとして動作させる事はできないのでしょうか。 特に公開する訳ではなく練習でホームページを作っており、index.htmlをindex.phpに変更し、その二つを同じ挙動にしたいです。 ドメイン名+index.phpでアクセスすればサイトは全体的に動作するのですが、ドメインのみでアクセスした場合、index.phpは表示されますが別のリンクからindex.phpに飛ぼうとするとうまく表示されません。これは、html拡張子の場合発生しません。 bootstrapを使用したレスポンシブのテンプレートを使用しています。 実際にphpを動作させたいのではなく、index.phpというファイルをindex.htmlと同じ様に動作させたいのです。二つのファイルの中身は全く一緒です。 ドメインのみでアクセスし、サイト内のどのリンクからトップページに飛んでも問題なく表示され、アドレスの欄にはindex.phpと表示させたいです。 変わった質問ですが、どうぞよろしくお願いします。

  • 韓国からの大量のアクセス

    ホームページを運営しているのですが2週間ほど前から 韓国から1時間に100回以上のアクセスがくるようになりました。 ただアクセスするだけでなく サイトのURL/index.php?data=123456789… と毎回data=以降を何百桁、文字列を変更してアクセスしてきます。 .htaccessで以下のサイトを参考に韓国、中国のIPを拒否したのですが、 http://www.hakusan.tsg.ne.jp/tjkawa/lib/krfilter/index.jsp 今度は日本のIPで同じようにアクセスしてきました。 これらの目的は何なのでしょうか? また何とか拒否することはできませんか? よろしくお願いいたします。

  • アクセス解析について。

    アクセス解析についてお伺い致します。よろしくお願いします。 アクセス解析やその他の方法で以下の様な場合の解析(判別)はできるのでしょうか? (有料や法人向け等も含めて。) (1) NTTのフレッツシリーズ等で2つ以上のプロバイダーを切り替えて利用した場合、 同一ユーザーと判別できるか?(PC・回線は同一の物。) (2) マルチセッション対応のモデム(ルーター)で2つ以上のプロバイダーにて 同時アクセスした場合、同一ユーザーと判別できるか?(PC・回線は同一の物。) (3) ドコモのFOMA携帯でFOMAカードを交換し、別FOMA携帯にてアクセスした場合、 同一ユーザーと判別できるか? (4) 同一回線・同一プロバイダーを利用している状況で、1つのPCで接続した後、 別のPCに回線を繋ぎ変えて接続した場合、「別のPCに切り替えた」と判別できるか? (OS・ブラウザは同一とします。) (1)~(3)はいずれも予測できる、ではなく確たる「判別」ができるか?です。 (接続地域は東京と推測される~等ではなく。) (4)はIPアドレスが変わるのでわかるではなく、繋ぎ変えたPCを判別できるか?です。 上記の中で(1)を解析できるものがあると聞いた事があるのですが…(デマ?)。 忍者TOOLSやinfoseekのアクセス解析を利用した事はありますが、 それ以外はあまり使った事がないので…。 私の利用していたアクセス解析では上記のいずれもわかりませんでした。 (私が理解できなかっただけかもしれませんが…。) 判別できる物(または方法)があるのでしょうか? そういうものを利用したい!というよりも判別できるのかどうかを知りたいだけです。 ふと疑問に思ったので(笑)。 変な質問で申し訳ありません。長文・乱文にて大変失礼致しました。 ご教授の程、よろしくお願い致します。

  • マルチドメインの場合、上階層のファイルを呼べる?

    マルチドメインは、あるディレクトリをドメインのように利用するようですが、そのディレクトリより上の階層にあるファイルにもアクセスすることはできるのでしょうか? home ├musti_domain1 ←これをマルチドメインに指定 │└index.php └function.php 上記のような構成の場合、index.phpはfunction.phpをincludeすることは可能ですか? どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • ドメインによるアクセス、IPアドレスによるアクセス

    現在、『さくらVPS』に契約をして、 『/home』下に『/hoge』というユーザーを作成し、 『/ドメインA』ディレクトリ内の『/public_html』にドメインAを割り当てたんですが、 『http://ドメインA/』でも、割り当てたIPアドレスでもアクセスできている状況です。 (各種ディレクトリ名、ドメイン名は適当です。)  /home   └ /hoge     └ /ドメインA       └ /public_html ドメインは『Value-Domain』で取得し、 設定フィールドに次のような記述をしています。(下記のIPアドレスは適当です。) さくらVPSでは、IPを1つもらえているので、そのIPを書いています。  a * 123.123.123.123  mx @ 10  txt @ v=spf1 ip4:123.123.123.123 ~all 今後、『/hoge』ディレクトリ内に、 以下のように別ドメインをどんどん追加していく予定です。  /home   └ /hoge     ├ /ドメインA       └ /public_html     ├ /ドメインB       └ /public_html     ├ /ドメインC       └ /public_html     ├ /ドメインD       └ /public_html     ├ /ドメインE       └ /public_html     └ /ドメインF       └ /public_html 先ほど書いた "『http://ドメインA/』でも、割り当てたIPアドレスでもアクセスできている状況" についてですが、 『http://ドメインA/』でアクセスできるのは何も気持ち悪いことはないのですが、 IPアドレスをブラウザのアドレスバーに打ち込んでアクセスしても、 『http://ドメインA/』と同じ内容で表示されているので、 『ドメインB』、『ドメインC』、『ドメインD』、…とドメインを増やし、 その都度、『Value-Domain』で下記のように割り当てた場合、  a * 123.123.123.123  mx @ 10  txt @ v=spf1 ip4:123.123.123.123 ~all IPアドレス直打ちの場合、どのドメインのサイトが表示されるのかなという疑問があります。 自分の中には、最終的に、ドメイン → IPアドレス というイメージがありますが、 ここで、出来れば、IPアドレスではなく、 ドメイン入力からのみのアクセスのみ許可にした方が気持ち的にはすっきりするのですが、 そういった方法はありますか? 長く読みづらくすみません…。

  • サーバへの不自然なアクセス

    初心者ながらサーバ管理をやっているものです。 今日、HTTPサーバのアクセスログを見ていて発見したのですが、 ここ数日、13時30分頃から約10分の間に、 30~40件の不自然なアクセスがあるようです。 その特徴を箇条書きにします ・参照元クライアントのIPアドレスは同じ(ただし日によって異なる) ・そのIPはJPNICのWHOISによると大手ネットワーク業者が所有するIPとなっている(日によって業者が異なる) ・参照先サイトのURLは "http:"から始まる完全なもので、全てアダルトサイト ・METHODにはGETもPOSTも使用 ・こちらのサーバには存在しないドキュメントを参照されている(しかもドメイン名が完全に異なっている) これはログの一部です xxx.xxx.xxx.xxx - - [12/Mar/2001:13:38:44 +0900] "GET http://www.topjapan.com/free/index.html HTTP/1.0" 200 11698 (アクセス元のIPは伏せています) 私が管理しているサーバのドメイン名はもちろん"topjapan.com"ではありません。 おそらくダイアルアップかなにかで接続している人の要求が こちらのサーバにきてしまっているのだと思うんですが、 まったく原因がわかりません。 原因がわかる方がいれば、是非、教えていただきたいです。

  • アクセス地域

    PHPで携帯用HPを作成しました。 現在管理画面を制作してるのですがIPその他の情報で大体のアクセス地域を判別することは可能でしょうか。 ご存知の方おられましたらご教授お願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう