本文分析一段结合ASP后端与前端JavaScript实现的二级域名转向代码。代码通过ADODB读取数据库UserInfo表,利用JS解析URL子域名并匹配数据库记录。文中指出原代码存在逻辑分支混乱、变量未定义及转向实现方式(Frameset)过时等问题,导致程序虽调试通过却无法正确执行转向,提供了详细的代码逻辑梳理与修正方向。
作者已成功运行基于ASP的二级域名转向系统,但在尝试引入前台JavaScript配合ASP的转向方案时遇到了问题。尽管程序经过调试未发现语法错误,但实际并未执行预期的域名跳转,作者希望查明具体原因。
<%
ASP后端数据库连接与数据读取
Dim whkDbq,whkSql,whkRs,whkCount
Set whkConn = Server.CreateObject("ADODB.Connection")
whkDbq = Server.MapPath("SqlTaoFun.mdb")
whkConn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&whkDbq
whkSql = "select bh,id from UserInfo where State='3'"
Set whkRS = Server.CreateObject("ADODB.Recordset")
whkRs.open whkSql,whkConn,3,3
%>
前端JavaScript域名解析与匹配逻辑
<script language="javascript">
var records = [],whkCoun = 0,whkFlag = 0;
<%
Do while not whkRs.Eof
%>
records[whkCoun] = new Array("<%=whkRs("bh")%>","<%=whkRs("id")%>");
document.write("whkCoun:"+whkCoun+" records["+whkCoun+"]:"+records[whkCoun][0]+records[whkCoun][1]+"<br>");
whkCoun = whkCoun + 1;
<%
whkRs.MoveNext
'whkConn = whkConn + 1
Loop
'Response.End()
%>
whkUrl = document.location.href;
document.write(whkUrl)
whkUrl = whkUrl.replace("http://","");
whkUrl = whkUrl.substring(0,whkUrl.indexOf("/"));
document.write("<br>whkUrl:"+whkUrl);
if (whkUrl.toLowerCase() != "www.taofun.cn")
{
var whkFirstP = whkUrl.indexOf("."),whkEndP = whkUrl.lastIndexOf("."),gotoUrl;
if ((whkFirstP == whkEndP) && ((whkFirstP != -1) || (whkEndP != -1)))
{
whkFlag = 0;
window.alert("taofun.cn");
//window.location.href = "http://www.taofun.cn/"
}
else
{
if (whkUrl == "localhost")
{
whkFlag = 0;
window.alert("localhost");
}
else
{
var whkUrl2 = whkUrl.substring(0,whkUrl.indexOf("."));
document.write("<br>whkUrl2:"+whkUrl2);
if (whkUrl2.toLowerCase() == "www")
{
if (whkUrl.indexOf(".",whkFirstP+1) == whkUrl.lastIndexOf(".",whkEndP-1))
for(i=0;i<whkCoun;i++)
{
document.write("<br>这里是读取的bh:"+records[i][0]);
if (records[i][0] == whkUrl.substring(whkFirstP+1,whkUrl.indexOf(".",whkFirstP+1)))
{
whkFlag = 1;
gotoUrl = "http://www.taofun.cn/show/Shop.asp?id="+records[i][1];
window.alert("找到"+records[i][0]+"的二级域名。");
break;
}
}
else
{
whkFlag = 0;
window.alert("输的太多了!");
//window.location.href = "http://www.taofun.cn/";
}
}
else
{
whkFlag = 0;
window.alert("开头请输www");
//window.location.href="http://www.taofun.cn/";
}
}
}
}
else
{
whkFlag = 0;
window.alert("去网站首页!");
//window.location.href = whkUrl;
}
document.write("<br>最后结果:"+gotoUrl+whkwhkwhk);
if (whkFlag == 1)
{
document.write("<frameset cols=\"*\"><frame frameborder=\"0\" scrolling=\"auto\" src=\""+gotoUrl+"\"><\/frameset>" );
}
</script>