现在我想做个站,对省份做二级域名。
比如 北京  上海 等,在数据库中存储二级域名名字分别为bj,sh, 如果点北京,就二级域名到 bj.域名 这种的,怎么实现

解决方案 »

  1.   

    去下个IP地址数据库根据访问者IP判断地区,自动转向对应的二级域名,然后根据二级域名的前缀,显示不同的内容.
    **********************一下是根据IP实现地区自动转跳的例子,希望有帮助
    <?php
         header("Content-type: text/html; charset=utf-8");
     
    //返回当前IP的城市字符串  
    function convertip($ip) {  
        //IP数据文件路径  
        $dat_path = 'data/QQWry.Dat';  
      
        //检查IP地址  
        if(!preg_match("/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/", $ip)) {  
            return 'IP Address Error';  
        }  
        //打开IP数据文件  
        if(!$fd = @fopen($dat_path, 'rb')){  
            return 'IP date file not exists or access denied';  
        }  
      
        //分解IP进行运算,得出整形数  
        $ip = explode('.', $ip);  
        $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];  
      
        //获取IP数据索引开始和结束位置  
        $DataBegin = fread($fd, 4);  
        $DataEnd = fread($fd, 4);  
        $ipbegin = implode('', unpack('L', $DataBegin));  
        if($ipbegin < 0) $ipbegin += pow(2, 32);  
        $ipend = implode('', unpack('L', $DataEnd));  
        if($ipend < 0) $ipend += pow(2, 32);  
        $ipAllNum = ($ipend - $ipbegin) / 7 + 1;  
          
        $BeginNum = 0;  
        $EndNum = $ipAllNum;  
      
        //使用二分查找法从索引记录中搜索匹配的IP记录  
        while($ip1num>$ipNum || $ip2num<$ipNum) {  
            $Middle= intval(($EndNum + $BeginNum) / 2);  
      
            //偏移指针到索引位置读取4个字节  
            fseek($fd, $ipbegin + 7 * $Middle);  
            $ipData1 = fread($fd, 4);  
            if(strlen($ipData1) < 4) {  
                fclose($fd);  
                return 'System Error';  
            }  
            //提取出来的数据转换成长整形,如果数据是负数则加上2的32次幂  
            $ip1num = implode('', unpack('L', $ipData1));  
            if($ip1num < 0) $ip1num += pow(2, 32);  
              
            //提取的长整型数大于我们IP地址则修改结束位置进行下一次循环  
            if($ip1num > $ipNum) {  
                $EndNum = $Middle;  
                continue;  
            }  
              
            //取完上一个索引后取下一个索引  
            $DataSeek = fread($fd, 3);  
            if(strlen($DataSeek) < 3) {  
                fclose($fd);  
                return 'System Error';  
            }  
            $DataSeek = implode('', unpack('L', $DataSeek.chr(0)));  
            fseek($fd, $DataSeek);  
            $ipData2 = fread($fd, 4);  
            if(strlen($ipData2) < 4) {  
                fclose($fd);  
                return 'System Error';  
            }  
            $ip2num = implode('', unpack('L', $ipData2));  
            if($ip2num < 0) $ip2num += pow(2, 32);  
      
            //没找到提示未知  
            if($ip2num < $ipNum) {  
                if($Middle == $BeginNum) {  
                    fclose($fd);  
                    return 'Unknown';  
                }  
                $BeginNum = $Middle;  
            }  
        }  
      
        $ipFlag = fread($fd, 1);  
        if($ipFlag == chr(1)) {  
            $ipSeek = fread($fd, 3);  
            if(strlen($ipSeek) < 3) {  
                fclose($fd);  
                return 'System Error';  
            }  
            $ipSeek = implode('', unpack('L', $ipSeek.chr(0)));  
            fseek($fd, $ipSeek);  
            $ipFlag = fread($fd, 1);  
        }  
      
        if($ipFlag == chr(2)) {  
            $AddrSeek = fread($fd, 3);  
            if(strlen($AddrSeek) < 3) {  
                fclose($fd);  
                return 'System Error';  
            }  
            $ipFlag = fread($fd, 1);  
            if($ipFlag == 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))  
                $ipAddr2 .= $char;  
      
            $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));  
            fseek($fd, $AddrSeek);  
      
            while(($char = fread($fd, 1)) != chr(0))  
                $ipAddr1 .= $char;  
        } else {  
            fseek($fd, -1, SEEK_CUR);  
            while(($char = fread($fd, 1)) != chr(0))  
                $ipAddr1 .= $char;  
      
            $ipFlag = fread($fd, 1);  
            if($ipFlag == 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)){  
                $ipAddr2 .= $char;  
            }  
        }  
        fclose($fd);  
      
        //最后做相应的替换操作后返回结果  
        if(preg_match('/http/i', $ipAddr2)) {  
            $ipAddr2 = '';  
        }  
        $ipaddr = "$ipAddr1 $ipAddr2";  
        $ipaddr = preg_replace('/CZ88.Net/is', '', $ipaddr);  
        $ipaddr = preg_replace('/^s*/is', '', $ipaddr);  
        $ipaddr = preg_replace('/s*$/is', '', $ipaddr);  
        if(preg_match('/http/i', $ipaddr) || $ipaddr == '') {  
            $ipaddr = 'Unknown';  
        }  
      
        return $ipaddr;  
    }  
      
      
    //查找字符串  
    function findstr($str, $substr)  
    {  
             $m = strlen($str);  
            $n = strlen($substr );  
            if ($m < $n) return false ;  
            for ($i=0; $i <=($m-$n+1); $i ++){  
                    $sub = substr( $str, $i, $n);  
                    if ( strcmp($sub, $substr) == 0) return true;  
            }  
            return false ;  
    }   
    ?>  
      
      
    <?php   
    $Clientip=$_SERVER["REMOTE_ADDR"];  
    $ClientCity=convertip($Clientip);  //获得所在城市字符串
    $ClientCity = iconv("gb2312","utf-8",$ClientCity); //将城市字符串由gb2312转化成utf-8编码,用于解决utf-8页面中文乱码
    if (findstr($ClientCity,"南昌")){  
        Header("Location: http://nanchang.domain.com");  
    }else{  
        Header("Location: http://www.domain.com");  
    }  
    ?>
      

  2.   

    特别感谢楼上回答 ,我的意思是如果北京,他的静态文件就在bj文件夹下,但是访问时我要通过二级域名bj.域名形式访问北京文件下的文件,不是跳转。 我不懂的是bj文件,sh文件夹,这些文件夹是不是要分别解析。