前面一文361源碼給大家講了《DEDE發布文章時自動替換文章中外鏈》的方法,其中我們就是針對的文章外聯的處理辦法。對于經常在自己網站發布外鏈鏈接的站長,經常為了避免權重流失會設置成外鏈通過本站的一個接口文件跳轉訪問,但是訪客訪問了哪些域名,這里就沒法記錄,因此我們提供這份源代碼,既可以跳轉訪問,又可以記錄被訪問的網址
代碼一:記錄被訪問的目標URL信息
<?$url = $_GET['url'];$file = "url.txt";$handle =fopen($file,'a'); fwrite($handle,"/r/n"); fwrite($handle,"URL:");fwrite($handle,"$url"); fclose($handele);header("location: $url");?>將以上命名為url.php或者你自己喜歡的文件名。然后外鏈通過這種方式訪問http://m.survivalescaperooms.com/url.php?url=www.baidu.com
然后你的網站根目錄下就會生成一個url.txt的文件,里面記錄了所有被訪問過的外鏈鏈接,按順序排列
當然為了服務器性能,是不建議繼續往這個跳轉功能里面加參數的,但是有時候為了記錄更多信息,比如訪客的IP,訪問時間,還需要繼續往下添加內容,如下面代碼:
代碼二:記錄被訪問的目標URL信息、訪客真實IP、訪問時間
<?function get_real_ip(){if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')){$ip = getenv('HTTP_CLIENT_IP');}elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')){$ip = getenv('HTTP_X_FORWARDED_FOR');}elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')){$ip = getenv('REMOTE_ADDR');}elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')){$ip = $_SERVER['REMOTE_ADDR'];}return preg_match("/[/d/.]{7,15}/", $ip, $matches) ? $matches[0] : false;}$url = $_GET['url'];$date = date('Y-m-d H:i:s');$file = "url.txt";$ip = get_real_ip();$handle =fopen($file,'a'); fwrite($handle,"/r/n"); fwrite($handle,"URL:");fwrite($handle,"$url" . ","); fwrite($handle,"DATE:");fwrite($handle,"$date" . ","); fwrite($handle,"IP:");fwrite($handle,"$ip"); fclose($handele);header("location: $url");?>這里定義了一個function方法,用于獲取訪客的真實IP,這里會對掛代理的情況進行判斷,直到判斷出真實IP,具體原理看這里
一般我們是不建議在跳轉的PHP放這么多東西,會影響效率
代碼三:記錄被訪問的目標URL信息、訪客IP(精簡代碼,可能是代理IP)、訪問時間
如果不考慮訪客使用代理的情況,那可以使用這個代碼
<?$url = $_GET['url'];$date = date('Y-m-d H:i:s');$file = "url.txt";$ip = $_SERVER['REMOTE_ADDR'];$handle =fopen($file,'a'); fwrite($handle,"/r/n"); fwrite($handle,"URL:");fwrite($handle,"$url" . ","); fwrite($handle,"DATE:");fwrite($handle,"$date" . ","); fwrite($handle,"IP:");fwrite($handle,"$ip"); fclose($handele);header("location: $url");?>代碼四:記錄被訪問的目標URL信息、訪客IP(精簡代碼,可能是代理IP)、來源頁面、訪問時間
<?$url = $_GET['url'];$referer = $_SERVER['HTTP_REFERER'];$date = date('Y-m-d H:i:s');$file = "url.txt";$ip = $_SERVER['REMOTE_ADDR'];$handle =fopen($file,'a'); fwrite($handle,"/r/n"); fwrite($handle,"URL:");fwrite($handle,"$url" . ", "); fwrite($handle,"ref:");fwrite($handle,"$referer" . ", "); fwrite($handle,"DATE:");fwrite($handle,"$date" . ", "); fwrite($handle,"IP:");fwrite($handle,"$ip"); fclose($handele);header("location: $url");?>代碼五:記錄被訪問的目標URL信息、訪客IP(精簡代碼,可能是代理IP)、來源頁面、訪問時間,并防止被人站外調用
這樣制作的跳轉文件,誰拿了都能拿去套著用,比如現在有人經常會在QQ群發違法鏈接,QQ會提示風險,但是如果對方套上你的這個鏈接再去發就不會有這個提示,這樣雖然你能通過記錄查到有人用這種方式在利用你的跳轉鏈接,但是你也沒辦法,這里再提供一個辦法。
就是在跳轉之前,先判斷一次點擊的來路,如果來路是來自你的域名,那就允許跳轉,否則就終止,通過QQ直接發鏈接,是讀取不到來路的,因此就能防止這種被利用的情況發生。
<?$url = $_GET['url'];$fromurl="http://m.survivalescaperooms.com/"; //定義一個返回網址$referer = $_SERVER['HTTP_REFERER'];$arr2 = parse_url($referer);$host2 = $arr2['host'];if(strpos($host2,'vevb.com') == false) //域名中沒包括vevb.com字眼的話,就執行下面步驟{header("Location:".$fromurl);//執行跳轉到這個網址exit;//結束}$date = date('Y-m-d H:i:s');$file = "url.txt";$ip = $_SERVER['REMOTE_ADDR'];$handle =fopen($file,'a'); fwrite($handle,"/r/n"); fwrite($handle,"URL:");fwrite($handle,"$url" . ","); fwrite($handle,"ref:");fwrite($handle,"$referer" . ","); fwrite($handle,"DATE:");fwrite($handle,"$date" . ","); fwrite($handle,"IP:");fwrite($handle,"$ip"); fclose($handele);header("location: $url");?>這里將來路URL讀取出來,然后取出URL中的域名,再判斷域名中有沒有vevb.com這個詞,沒有的話,就跳轉到m.survivalescaperooms.com,有的話,就繼續往下執行跳轉代碼。
通過這樣設置,這個鏈接就只能通過你網站中的頁面中點擊去訪問,直接貼到瀏覽器,或者通過QQ,微信之類的窗口點擊訪問就會被跳轉到你的網站首頁去
代碼六:可接收BASE64加密過的鏈接信息并解碼訪問,然后記錄被訪問的目標URL信息、訪客IP(精簡代碼,可能是代理IP)、來源頁面、訪問時間,并防止被人站外調用
有些淘客類網站并不希望頁面上顯示的鏈接包括淘寶的域名信息,因此會通過PHP代碼對頁面中非本站的鏈接進行BASE64加密,然后再跳轉訪問,這個時候我們的url.php接受到的就是類似aHR0cHM6Ly9zLmNsaWNrLnRhb2Jhby5jb20vZXdCc1BZdw== 這樣的URL信息,是無法直接訪問的,因此需要再做一重解碼
<?$url = $_GET['url'];if(strpos($url,'.') == false) //域名中沒包括點號就判斷未被base64加密過,進行解碼{$url = base64_decode($url);}$fromurl="http://m.survivalescaperooms.com/"; //定義一個返回網址$referer = $_SERVER['HTTP_REFERER'];$arr2 = parse_url($referer);$host2 = $arr2['host'];if(strpos($host2,'vevb.com') == false) //域名中沒包括vevb.com字眼的話,就執行下面步驟{header("Location:".$fromurl);//執行跳轉到這個網址exit;//結束}$date = date('Y-m-d H:i:s');$file = "url.txt";$ip = $_SERVER['REMOTE_ADDR'];$handle =fopen($file,'a'); fwrite($handle,"/r/n"); fwrite($handle,"URL:");fwrite($handle,"$url" . ","); fwrite($handle,"ref:");fwrite($handle,"$referer" . ","); fwrite($handle,"DATE:");fwrite($handle,"$date" . ","); fwrite($handle,"IP:");fwrite($handle,"$ip"); fclose($handele);header("location: $url");?>代碼七:另外還有一種情況,你要跳轉的URL中帶有特殊字符比如"#","&"之類的,這些符號$_GET是獲取不到的,因此需要再進行變通處理,這里就不能用$_get來獲取URL,只能通過獲取訪客打開后一整串URL,然后讀取出url=后面的參數就是要跳轉的網址了
但是我們不建議這種方式獲取傳輸參數,因為# &值了之類的字符都是php的執行符,如果不進行過濾,就可能出現,訪客通過這種方式向你服務器傳遞參數,可能會存在執行漏洞,進而黑掉整個服務器,因此除非你知道你在做什么,不然不建議你這么做,風險系數很大。
代碼詳見如下,其實就是將$_GET['url'};替換成下面的前5句
<?$url = $_SERVER["REQUEST_URI"];$searchString = "url="; //定義用做跳轉用的標記字符就是后綴?url=要跳轉的鏈接這種方式$url = strstr($url,$searchString);$length = strlen($searchString);$url = substr($url, $length);if(strpos($url,'.') == false) //域名中沒包括點號就判斷未被base64加密過,進行解碼{$url = base64_decode($url);}$fromurl="http://m.survivalescaperooms.com/"; //定義一個返回網址$referer = $_SERVER['HTTP_REFERER'];$arr2 = parse_url($referer);$host2 = $arr2['host'];if(strpos($host2,'vevb.com') == false) //域名中沒包括vevb.com字眼的話,就執行下面步驟{header("Location:".$fromurl);//執行跳轉到這個網址exit;//結束}$date = date('Y-m-d H:i:s');$file = "url.txt";$ip = $_SERVER['REMOTE_ADDR'];$handle =fopen($file,'a'); fwrite($handle,"/r/n"); fwrite($handle,"URL:");fwrite($handle,"$url" . ","); fwrite($handle,"ref:");fwrite($handle,"$referer" . ","); fwrite($handle,"DATE:");fwrite($handle,"$date" . ","); fwrite($handle,"IP:");fwrite($handle,"$ip"); fclose($handele);header("location: $url");?>代碼八、另外如果需要記錄訪客瀏覽器信息,比如用于判斷是否是搜索引擎的訪問,那可以加一句
$agent = $_SERVER['HTTP_USER_AGENT'];fwrite($handle,"$agent");
加在相應位置就行了
以上代碼361源碼網(vevb.com)全部測試過可用,大家可以直接拿來主義,如果對你有所幫助,請多多支持我們的小編吧。
以上就是網站外鏈通過本站域名跳轉訪問并記錄跳轉鏈接來源時間IP的方法的全部內容,希望對大家的學習和解決疑問有所幫助,也希望大家多多支持武林網。新聞熱點
疑難解答