在前人的一些代码修改之下,自己弄出来了一个这样的跳转方案,可能不是很完美,不过也花了不少时间总算还是实现了需求,以我现在的js能力只能做到这样了,改进可能要到以后了。看代码吧,直接用例子说话,一边解释最好。(现在觉得代码有时比说话简洁,呵呵)
先把下面代码另存为js文件,然后可以放在网页的任何位置,当然不影响网页加载速度优先。
- var surl=document.location.href+"&from="+from;//自定义的一个来源 可以不要
- var s=document.referrer;
- /*****
- 思路大概是:
- 获取从百度来的关键词 用我们自己的关键词匹配 匹配对了 跳转到指定网页
- 跳转到一个php文件的好处 是用表单做跳转 对seo影响较小 而且还可以在php里面加些自定义判断功能
- 其中有用到 站长工具(http://tool.chinaz.com/)的 url编码解码 大小写转换
- js的 .test() 函数 是看能是否字符串匹配成功
- *****/
- var re=/((wd|q|w|p|query)(=)([%A-Z0-9]*)(%E9%A3%8E%E6%B9%BF))/; //风湿 url编码 格式为utf-8的
- var re1=/((wd|q|w|p|query)(=)([%A-Z0-9]*)(%E9%AA%A8%E8%B4%A8%E5%A2%9E%E7%94%9F))/; //骨质增生 url编码
- var re2=/((wd|q|w|p|query)(=)([%A-Z0-9]*)(%E9%A2%88%E6%A4%8E%E7%97%85))/; //颈椎病 url编码
- var re3=/((wd|q|w|p|query)(=)([%A-Z0-9]*)(%E5%BC%BA%E7%9B%B4%E6%80%A7%E8%84%8A%E6%9F%B1%E7%82%8E))/; //强直性脊柱炎 url编码
- var re4=/((wd|q|w|p|query)(=)([%A-Z0-9]*)(%E7%97%9B%E9%A3%8E))/; //痛风 url编码
- var re5=/((wd|q|w|p|query)(=)([%A-Z0-9]*)(%E8%85%B0%E6%A4%8E%E7%97%85))/; //腰椎病 url编码
- var re6=/((wd|q|w|p|query)(=)([%A-Z0-9]*)(%E8%82%A9%E5%91%A8%E7%82%8E))/; //肩周炎 url编码
- var re7=/((wd|q|w|p|query)(=)([%A-Z0-9]*)(%E5%93%81%E7%89%8C))/; //品牌 url编码
- var curl=window.location.href;
- if(re.test(s))
- {
- var iii = decodeURI('%E9%A3%8E%E6%B9%BF');
- yh_turn('http://www.120xbk.com/swt/tiaozhuan.php?a='+iii+'&from='+from,curl,1); //get传值 到tiaozhuan.php
- }
- else if(re1.test(s))
- {
- var iii = decodeURI('%E9%AA%A8%E8%B4%A8%E5%A2%9E%E7%94%9F');
- yh_turn('http://www.120xbk.com/swt/tiaozhuan.php?a='+iii+'&from='+from,curl,1);
- }
- else if(re2.test(s))
- {
- var iii = decodeURI('%E9%A2%88%E6%A4%8E%E7%97%85');
- yh_turn('http://www.120xbk.com/swt/tiaozhuan.php?a='+iii+'&from='+from,curl,1);
- }
- else if(re3.test(s))
- {
- var iii = decodeURI('%E5%BC%BA%E7%9B%B4%E6%80%A7%E8%84%8A%E6%9F%B1%E7%82%8E');
- yh_turn('http://www.120xbk.com/swt/tiaozhuan.php?a='+iii+'&from='+from,curl,1);
- }
- else if(re4.test(s))
- {
- var iii = decodeURI('%E7%97%9B%E9%A3%8E');
- yh_turn('http://www.120xbk.com/swt/tiaozhuan.php?a='+iii+'&from='+from,curl,1);
- }
- else if(re5.test(s))
- {
- var iii = decodeURI('%E8%85%B0%E6%A4%8E%E7%97%85');
- yh_turn('http://www.120xbk.com/swt/tiaozhuan.php?a='+iii+'&from='+from,curl,1);
- }
- else if(re6.test(s))
- {
- var iii = decodeURI('%E8%82%A9%E5%91%A8%E7%82%8E');
- yh_turn('http://www.120xbk.com/swt/tiaozhuan.php?a='+iii+'&from='+from,curl,1);
- }
- else if(re7.test(s))
- {
- var iii = decodeURI('%E5%93%81%E7%89%8C');
- yh_turn('http://www.120xbk.com/swt/tiaozhuan.php?a='+iii+'&from='+from,curl,1);
- }
- else
- {
- yh_turn('http://www.120xbk.com/swt/tiaozhuan.php',surl,1);
- }
- //模拟提交表单跳转
- function yh_turn(url,domain,from)
- {
- function isURL(url){
- return(/^(http(s?))\:\/\/([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?([\/\?]\S*)?$/.test(url));
- }
- if(!isURL(url))return false;
- function doSubmit()
- {
- //hidden body
- document.writeln('<style type="text/css">body{display:none;}</style>');
- //var tjurl = url+'?'+domain;
- var tjurl = url;
- document.write('<form name="myform" id="tj" action="'+tjurl+'" method="post" target="_self"></form>');
- //document.myform.submit();
- setTimeout('document.getElementById("tj").submit()',500);
- }
- if(from==1){
- var s=document.referrer;
- if(s&&(s.indexOf("baidu.com")>0||s.indexOf("google.com")>0||s.indexOf("soso.com")>0||s.indexOf("sogou.com")>0)){
- doSubmit();
- }
- }
- if(from==0){
- doSubmit(); //不经过百度 默认都跳转
- }
- }
然后是经过一个tiaozhuan.php 处理,代码如下
- <?php
- $refer = $_SERVER['HTTP_REFERER'];
- $from = $_GET['from']; //如果有来源 接收来源
- $a = $_GET['a'];
- $b = urldecode($a); //将字符串以URL解码
- //处理变量$refer
- $str=substr($refer,7);//去除前面
- $n=strpos($str,'/');//寻找位置
- if ($n) $str=substr($str,0,$n);//删除后面
- $url_this = "http://".$_SERVER ['HTTP_HOST'];
- header("HTTP/1.1 301 Moved Permanently");
- if($refer)
- {
- switch($b)
- {
- case '风湿': header("location:".$url_this."/tszl/20110805-527.html?".$str."&".$from);break;
- case '骨质增生':header("location:".$url_this."/bingli/gjzx/20110702-272.html?".$str."&".$from);break;
- case '颈椎病':header("location:".$url_this."/tszl/20110805-546.html?".$str."&".$from);break;
- case '强直性脊柱炎':header("location:".$url_this."/tszl/20110702-284.html?".$str."&".$from);break;
- case '痛风':header("location:".$url_this."/tszl/20110702-285.html?".$str."&".$from);break;
- case '腰椎病':header("location:".$url_this."/tszl/20110702-287.html?".$str."&".$from);break;
- case '肩周炎':header("location:".$url_this."/tszl/20110702-263.html?".$str."&".$from);break;
- case '品牌':header("location:".$url_this."/tszl/?".$str."&".$from);break;
- default: header("location:".$url_this."?".$str."&".$from);break;
- }
- }
- else
- exit;
- ?>
到这里基本实现我所要的功能,但我总觉得还可以更优化,希望高手能指正出不足的地方!