建站经验 experience
当前位置:首页 > 网站建设专题 > 建站经验
SEM推广实现不同IP访问网站显示不同的内容
发布日期:2011-09-04 阅读次数:608 字体大小:

很多做百度推广或谷歌Adwords的人都会遇到了些因网站内容不太符合百度或谷歌的相关政策而帐户被拒的情况。如果网站确实含违规内容,被拒理所应当,这也是为了保障网民的利益。而实际似乎很多情况下因为一刀切,网站也没有太违规的内容也被误杀,所以经常会想一些办法来规避审核不通过的风险。

那么一般会有哪些方法来处理这样的问题呢?

1.先做一些完全符合规范的单页或者专题页,提交,审核通过后作301跳转

操作起来比较容易,先做静态单页index.html或者index.php,提交审核,审核通过后,直接在服务器IIS下设置资源永久重定向,把index.html301跳转到真实的页面,如果是index.php,则可直接在里面写PHP301跳转代码:

<?php

header("HTTP/1.1 301 Moved Permanently");

header('location:http://www.***.com/');

exit;

?>

2.区域性IP屏蔽

有些推广的网站本来就有地域性,只需要特定地区可访问就行了,然后如果全国可访问也没关系,重点是百度或GOOGLE总部审核人员所在的地区如果可以访问,可能导致网站被误判的,那么通常会考虑直接把部分地区的IP给禁掉了。

从程序上实现:获取访案IP->在全真IP库中查找出IP所在地区->正则匹配->显示不同页面。

具体代码如下:

//php获取ip的算法

$user_IP = ($_SERVER"HTTP_VIA") ? $_SERVER"HTTP_X_FORWARDED_FOR" : $_SERVER"REMOTE_ADDR";

$user_IP = ($user_IP) ? $user_IP : $_SERVER"REMOTE_ADDR";

//echo $user_IP;

?>

<?

//===================================

//

// 功能:IP地址获取真实地址函数

// 参数:$ip - IP地址

// 作者:Discuz! (C) Comsenz Inc.

//

//===================================

function convertip($ip) {

//IP数据文件路径

$dat_path = './ip/qqWry.dat';//需下载纯真IP库

//检查IP地址

if(!ereg("^(0-9{1,3}.){3}0-9{1,3}$", $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 = $ip0 * 16777216 + $ip1 * 65536 + $ip2 * 256 + $ip3;

//获取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;

}

$area=convertip($user_IP);

if(strpos($area,'福建')===false){

echo file_get_contents('index.html');

}else{

echo file_get_contents('default.htm');

}

?>

3.特定IP或者特定IP段限制

有些站是需要全国推广的,肯定不能直接禁掉一个地区了,那样损失会比较惨重。那么只能是说通过一些方式获取审核人员的IP或者IP段,然后来针对这些IP显示不同的内容了。

那么怎样获取审核人员的IP呢?这里有些技巧,先做一个可以检测IP信息的页面,保证没有第三个人知道这个页面,然后提交推广帐户审核,记录下IP,即得到审核人员的IP或IP段了。

然后通过程序处理,判断当前访客IP,如果IP在所记录的审核人员的IP段内,直接封掉或者显示不同的内容。

具体实现代码如下:

获取审核人员IP:

<?

//php获取ip的算法

$user_IP = ($_SERVER"HTTP_VIA") ? $_SERVER"HTTP_X_FORWARDED_FOR" : $_SERVER"REMOTE_ADDR";

$user_IP = ($user_IP) ? $user_IP : $_SERVER"REMOTE_ADDR";

echo $user_IP;

?>

对特定IP段显示不同内容:

<?php

$user_IP = ($_SERVER"HTTP_VIA") ? $_SERVER"HTTP_X_FORWARDED_FOR" : $_SERVER"REMOTE_ADDR";

$ip2 = ($user_IP) ? $user_IP : $_SERVER"REMOTE_ADDR";

$ip2A=explode('.',$ip2);

$ip2=$ip2A0.'.'.$ip2A1.'.'.$ip2A2;

$ipArr2=array('121.32.89','220.181.50','180.168.217');

if(in_array($ip2,$ipArr2)){

echo file_get_contents('abc.htm');

}else{

echo file_get_contents('def.htm');

}

?>

4.给蜘蛛放行

那么,这样处理后,细心的你会想,这样部分地区的蜘蛛也不是被干掉了,爬到的不也不是想到的内容?这个问题也可以好处理,判断来路是否为蜘蛛,然后给蜘蛛放行。

下面是判断是否为蜘蛛的PHP函数:

function is_websearch()

{

if(!defined('IS_WEBSEARCH'))

{

$useragent = strtolower($_SERVER'HTTP_USER_AGENT');

$browsers = 'msie|netscape|opera|konqueror|mozilla';

$spiders = 'bot|spider|google|isaac|surveybot|baiduspider|yahoo|sohu-search|yisou|3721|qihoo|daqi|ia_archiver|p.arthur|fast-webcrawler|java|microsoft-atl-native|turnitinbot|webgather|sleipnir|msn';

if(preg_match("/($browsers)/", $_SERVER'HTTP_USER_AGENT'))

{

define('IS_WEBSEARCH', FALSE);

}

elseif(preg_match("/($spiders)/", $_SERVER'HTTP_USER_AGENT'))

{

define('IS_WEBSEARCH', TRUE);

}

else

{

define('IS_WEBSEARCH', FALSE);

}

}

return IS_WEBSEARCH;

}

在上面屏蔽IP的避加上是否为蜘蛛的判断函数的调用,给蜘蛛放行即可。

本文中主要从技术角度去实现对一些风险的规避,但并不意味着倡导大家做一些不适合推广的站点去做推广,希望能给有实际需要的人参考。