起 因

很多网站都被这些
ytlqpo.com
www.inlojv.com.s3.gvirabi.com
www.inlojv.com.3s3s.org
www.inlojv.com.lapaleo.com
给做了镜像。
我的 www.inlojv.com.lapaleo.com —— 也不能幸免。被人用反向代理做了一个一模一样的站。
这和当初七牛一样,七牛镜像当初没有robots.txt 导致多个网站内容相同而被降权。

解决方法一

获取镜像网站他服务器的IP,然后封禁。(注:这个IP不是ping到他域名的IP)
必须从访问日记中获取,不过一般日记文件很大,很难一遍遍查找,所以可以用一个php文件来获取它,代码如下:

<?php
$file = "ip.txt"; // 保存ip的txt文件
$ip = $_SERVER['REMOTE_ADDR'];
$handle = fopen($file, 'a');
fwrite($handle, "IP Address: ");
fwrite($handle, "$ip");
fwrite($handle, "\n");
fclose($handle);
?>

将它保存为getip.php,上传到网站的根目录。
然后访问镜像站点下的该文件,例如:www.inlojv.com.s3.gvirabi.com/getip.php
这样就会在你网站的根目录生成一个ip.txt文件,打开它就可以看到镜像站点的ip了。
剩下要做的就是对此ip进行封禁。在.htaccess中加入 deny from xxx.xxx.xxx.xxx 即可。

解决方法二

之前的JS方法已经失效,我写了一个针对wp的新js方法,通过拆分域名链接与镜像站比对,然后用img标签src空值触发onerror来执行js比对,比对失败则跳转回源站。

代码如下:(复制粘贴到主题的functions.php最后一个?>之前)

// 防镜像 - inlojv.com
add_action('wp_footer','inlojv_reverse_proxy_defense');
function inlojv_reverse_proxy_defense(){
	$domain_arr 	= explode('//',home_url());
	$domain 		= $domain_arr[1];
    echo '<img style="display:none" id="inlojv-rpd" src="nothing" data-url="'.home_url().'" onerror="var str0=document.getElementById(\'inlojv-rpd\').attributes.getNamedItem(\'data-url\').nodeValue;var ishttps=\'https:\'==document.location.protocol?true:false;if(ishttps){var str1=\'https\'+\'://\';}else{var str1=\'http\'+\'://\';}var str2=\''.$domain.'\';var str3=str1+str2;if( str0!=str3 ){alert(\'\u6b64\u7ad9\u4e3a\u6076\u610f\u955c\u50cf\u7ad9\uff01\u5c06\u7acb\u5373\u4e3a\u60a8\u8df3\u8f6c\u5230\u6e90\u7ad9\uff01\');if (!!(window.attachEvent && !window.opera)){document.execCommand(\'stop\');}else{ window.stop();}var str4=\'wind\'+\'ow.loca\'+\'tion.rep\'+\'lace(str3)\';eval(str4);}">';
}