第二レベルドメイン名にジャンプするIP判定都市を作りました。そのファイルを公開記事ファイルに入れてURLを開くと常時アクセスが飛んでしまいます。このジャンプを達成するには、この無限アクセスの問題は発生しません。クッキーを使用することを考えましたが、どうすればよいかわかりません。
いわゆるパブリック ファイルは他の多くのファイルに含まれていますか?
いわゆるパブリック ファイルは他の多くのファイルに含まれていますか?
コードを投稿してください
私はしません。わかりません どのように書いたのでしょうか?また、変更方法はどのようにしてわかりましたか?
<?function GetIP() { if ($_SERVER["HTTP_X_FORWARDED_FOR"]) $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; else if ($_SERVER["HTTP_CLIENT_IP"]) $ip = $_SERVER["HTTP_CLIENT_IP"]; else if ($_SERVER["REMOTE_ADDR"]) $ip = $_SERVER["REMOTE_ADDR"]; else if (getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "Unknown"; return $ip;}$userip=GetIP();/*函数名称:ipCity参数说明:$userip??用户IP地址函数功能:PHP通过IP地址判断用户所在城市author:leecontact:xpsem2010@gmail.com*/function ipCity($userip) { //IP数据库路径,这里用的是QQ IP数据库 20110405 纯真版 $dat_path = 'qqwry.dat'; //判断IP地址是否有效 if(!ereg("^([0-9]{1,3}.){3}[0-9]{1,3}$", $userip)){ return 'IP Address Invalid'; } //打开IP数据库 if(!$fd = @fopen($dat_path, 'rb')){ return 'IP data file not exists or access denied'; } //explode函数分解IP地址,运算得出整数形结果 $userip = explode('.', $userip); $useripNum = $userip[0] * 16777216 + $userip[1] * 65536 + $userip[2] * 256 + $userip[3]; //获取IP地址索引开始和结束位置 $DataBegin = fread($fd, 4); $DataEnd = fread($fd, 4); $useripbegin = implode('', unpack('L', $DataBegin)); if($useripbegin < 0) $useripbegin += pow(2, 32); $useripend = implode('', unpack('L', $DataEnd)); if($useripend < 0) $useripend += pow(2, 32); $useripAllNum = ($useripend - $useripbegin) / 7 + 1; $BeginNum = 0; $EndNum = $useripAllNum; //使用二分查找法从索引记录中搜索匹配的IP地址记录 while($userip1num>$useripNum || $userip2num<$useripNum) { $Middle= intval(($EndNum + $BeginNum) / 2); //偏移指针到索引位置读取4个字节 fseek($fd, $useripbegin + 7 * $Middle); $useripData1 = fread($fd, 4); if(strlen($useripData1) < 4) { fclose($fd); return 'File Error'; } //提取出来的数据转换成长整形,如果数据是负数则加上2的32次幂 $userip1num = implode('', unpack('L', $useripData1)); if($userip1num < 0) $userip1num += pow(2, 32); //提取的长整型数大于我们IP地址则修改结束位置进行下一次循环 if($userip1num > $useripNum) { $EndNum = $Middle; continue; } //取完上一个索引后取下一个索引 $DataSeek = fread($fd, 3); if(strlen($DataSeek) < 3) { fclose($fd); return 'File Error'; } $DataSeek = implode('', unpack('L', $DataSeek.chr(0))); fseek($fd, $DataSeek); $useripData2 = fread($fd, 4); if(strlen($useripData2) < 4) { fclose($fd); return 'File Error'; } $userip2num = implode('', unpack('L', $useripData2)); if($userip2num < 0) $userip2num += pow(2, 32); //找不到IP地址对应城市 if($userip2num < $useripNum) { if($Middle == $BeginNum) { fclose($fd); return 'No Data'; } $BeginNum = $Middle; } } $useripFlag = fread($fd, 1); if($useripFlag == chr(1)) { $useripSeek = fread($fd, 3); if(strlen($useripSeek) < 3) { fclose($fd); return 'System Error'; } $useripSeek = implode('', unpack('L', $useripSeek.chr(0))); fseek($fd, $useripSeek); $useripFlag = fread($fd, 1); } if($useripFlag == chr(2)) { $AddrSeek = fread($fd, 3); if(strlen($AddrSeek) < 3) { fclose($fd); return 'System Error'; } $useripFlag = fread($fd, 1); if($useripFlag == chr(2)) { $AddrSeek2 = fread($fd, 3); if(strlen($AddrSeek2) < 3) { fclose($fd); return 'System Error'; } $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0))); fseek($fd, $AddrSeek2); } else { fseek($fd, -1, SEEK_CUR); } while(($char = fread($fd, 1)) != chr(0)) $useripAddr2 .= $char; $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0))); fseek($fd, $AddrSeek); while(($char = fread($fd, 1)) != chr(0)) $useripAddr1 .= $char; } else { fseek($fd, -1, SEEK_CUR); while(($char = fread($fd, 1)) != chr(0)) $useripAddr1 .= $char; $useripFlag = fread($fd, 1); if($useripFlag == chr(2)) { $AddrSeek2 = fread($fd, 3); if(strlen($AddrSeek2) < 3) { fclose($fd); return 'System Error'; } $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0))); fseek($fd, $AddrSeek2); } else { fseek($fd, -1, SEEK_CUR); } while(($char = fread($fd, 1)) != chr(0)){ $useripAddr2 .= $char; } } fclose($fd); //返回IP地址对应的城市结果 if(preg_match('/http/i', $useripAddr2)) { $useripAddr2 = ''; } $useripaddr = "$useripAddr1 $useripAddr2"; $useripaddr = preg_replace('/CZ88.Net/is', '', $useripaddr); $useripaddr = preg_replace('/^s*/is', '', $useripaddr); $useripaddr = preg_replace('/s*$/is', '', $useripaddr); if(preg_match('/http/i', $useripaddr) || $useripaddr == '') { $useripaddr = 'No Data'; } return $useripaddr;}?><script language="javascript">var city='<?php echo ipCity($userip);?>';if(city.indexOf("西宁市")>=0){window.location.href="http://www.js0971.com/";}else{window.location.href="http://bj.0971my.com/";}</script>这个是ipaddress.php页面require (ROOT_PATH . 'include/config.php');require (ROOT_PATH . 'include/smarty/Smarty.class.php');require (ROOT_PATH . 'include/mysql.class.php');require (ROOT_PATH . 'include/action.class.php');require (ROOT_PATH . 'include/check.class.php');require (ROOT_PATH . 'include/page.class.php');require (ROOT_PATH . 'include/ipaddress.php'); 这个是判断ip切换城市的这是公共调用文件的一部分
<script language="javascript">var city='<?php echo ipCity($userip);?>';if(city.indexOf("西宁市")>=0){window.location.href="http://www.js0971.com/";}else{window.location.href="http://bj.0971my.com/";}</script>では、都市の内容に関係なく、常にジャンプします
<script language="javascript">var city='<?php echo ipCity($userip);?>';if(city.indexOf("西宁市")>=0){window.location.href="http://www.js0971.com/";}else{window.location.href="http://bj.0971my.com/";}</script>では、街が何であれ、常にジャンプします
デフォルトで http://www.js0971.com/ が開くので、西寧市にジャンプする必要はありません
if( city.indexOf("西寧市")> =0){
//window.location.href="http://www.js0971.com/"
}else{
window.location.href="http ://bj.0971my.com/"; //西寧市にいない場合のみジャンプする必要があります
}
デフォルトで http://www.js0971.com/ を開くので、ジャンプする必要はありません。西寧市にいる場合はジャンプする必要はありません
if(city.indexOf("西寧市")>=0){
//window.location.href="http://www.js0971.com/";
}else{
window.location.href="http://bj.0971my .com/"; //リダイレクトする必要があるのは西寧市ではありません
}
今の問題は、開いた瞬間にこの URL にアクセスしてジャンプし続けますが、これにより上記のコードが実行されます。問題は、この IP がすでにアクセスされているかどうかを、常にジャンプするのではなく、直接開くことです。コメントアウトすると実行されないのでしょうか?
コメントアウトすると実行されないのでしょうか?
bj.0971my.com で西寧市かどうかも判断しますか?
モデレーターは私の意味を理解していませんでした。第 2 レベルのドメイン名も同じ Web サイトですが、都市が異なります。同じ Index.php ページを使用しているため、ジャンプし続けます。
異なる第 2 レベル ドメイン名は異なる判定条件を持ちます。すべてを綴ると、当然機能しません。
58 のようです。異なる都市では異なるコンテンツが開きますが、それらはすべて同じindex.php であるか、他のフォルダーに解析されます。
Cookie またはセッションを使用して都市マークを保存します。 例: 0 の場合、IP 判定ジャンプを入力してマークを変更します。 city>0
IP から都市 (地域) 名を取得するときは、第 2 レベルのドメイン名を検索するだけです。テーブルからレベルのドメイン名を取得してジャンプします(ヘッダー関数)。もちろん $_SERVER['HTTP_HOST'] と比較し、すでに同じであればジャンプしません
其实你这段 js 代码是不需要的
你既然是根据用户的 ip 跳转对应的二级域名,那么你就应该有一个城市(地区)与二级域名的对照表
当从 ip 取得城市(地区)名时,从此表查得二级域名进行跳转就可以了(header 函数),当然还要和 $_SERVER['HTTP_HOST'] 比较一下,已经是了就不再跳转了
<?php//开始获取城市IP$userip=GetIP();//获取城市$city=ipCity($userip);/*从数据库获取二级域,如果存在则跳转至二级域名,否则直接默认一级域名http://www.0971my.com*/$sql=$db->query("select * from ".$db->table('area')." where title like '%".$city."%'");$row=$db->fetch_array($sql);if(!$row){ header("Location:http//www.0971my.com");}else{ if($row['title']=='西宁市'){ header("Location:http://www.0971my.com"); }else{ header("Location:".$row['dns'].""); }}?>
如果用header()跳转的话,就会直接是这个结果http://www.0971my.com/http//www.0971my.com
地址后面给个标志位比如,transf=1 ,页面首先接受request[""]==1,则不执行判断。
你这样写死了怎么行。。。。
地址后面给个标志位比如,transf=1 ,页面首先接受request[""]==1,则不执行判断。
你这样写死了怎么行。。。。
很简单, 主域名 www.xxx.com
分站域名, bj.xxx.com, xa.xxx.com, gz.xxx.com ....
从www来的请求,根据ip跳转到分站, 分站的代码不需要跳转,简单判断域名然后用header()跳转就好了。
其实你这段 js 代码是不需要的
你既然是根据用户的 ip 跳转对应的二级域名,那么你就应该有一个城市(地区)与二级域名的对照表
当从 ip 取得城市(地区)名时,从此表查得二级域名进行跳转就可以了(header 函数),当然还要和 $_SERVER['HTTP_HOST'] 比较一下,已经是了就不再跳转了
很简单, 主域名 www.xxx.com
分站域名, bj.xxx.com, xa.xxx.com, gz.xxx.com ....
从www来的请求,根据ip跳转到分站, 分站的代码不需要跳转,简单判断域名然后用header()跳转就好了。
谢谢,各位我已经弄出来了,但是现在还有一个问题么考虑到,就是手动选择城市,这里的cookie是不是跨域访问了?
你针对的是二级域名,指定 setcookie 的4个参数即可
你针对的是二级域名,指定 setcookie 的4个参数即可