展会信息港展会大全

asp.net网站首页根据IP自动跳转指定页面的示例
来源:互联网   发布日期:2016-01-26 10:49:29   浏览:943次  

导读:本文介绍的程序主要实现根据IP地址或地址段或IP所在城市进行自动跳转到指定页面的功能,需要的朋友可以参考下对于大中型网站,为了增强用户体验,往往需要根据不同城市站点的用户推送或展现相应个性化的内容,如对 ...

本文介绍的程序主要实现根据IP地址或地址段或IP所在城市进行自动跳转到指定页面的功能,需要的朋友可以参考下

对于大中型网站,为了增强用户体验,往往需要根据不同城市站点的用户推送或展现相应个性化的内容,如对于一些大型门户网站的新闻会有城市站点的功能,如果没有设置相应的城市站点,默认就是根据用户访问的IP地址的所在城市自动设置。本文主要通过自定义扩展IHttpModule接口,考虑到性能 IP数据库主要采用QQwry纯真IP数据库,主要实现根据IP地址或地址段或IP所在城市进行自动跳转到指定页面的功能(支持Nginx作为前端反向代理服务器),该WebsiteSkip组件核心代码如下:

代码如下:

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

using System.Xml;

using System.IO;

using System.Net;

using System.Text.RegularExpressions;

using NetOpen_System.Component.QQWry;

namespace NetOpen_System.Component

{

public sealed class WebsiteSkipHttpModule : IHttpModule

{

#region IHttpModule 成员

public void Dispose()

{

}

public void Init(HttpApplication context)

{

context.BeginRequest += new EventHandler(context_BeginRequest);

}

#endregion

void context_BeginRequest(object sender, EventArgs e)

{

try

{

//if (HttpContext.Current.Request.IsLocal)//忽略本地计算机请求

//return;

//string ip = HttpContext.Current.Request.UserHostAddress;

//string ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();

string ip = string.Empty;

if (HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"] != null)

{

ip = HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"].ToString();

}

else if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)

{

ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();

}

else if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)

{

ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();

}

else

{

ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();

}

QQWryLocator qqWry = new QQWryLocator(HttpContext.Current.Server.MapPath(@"~IpDataqqwry.dat"));

IPLocation ipaddress = qqWry.Query(ip);//查询一个IP地址

string ls_city = ipaddress.Country;

string ls_urlfrom = string.Empty;

string ls_urlto = string.Empty;

string ls_url = HttpContext.Current.Request.Url.AbsoluteUri;

string ls_useragentkeyword = string.Empty;

ExcludeUserAgentMatchEngine Em = WebsiteSkipConfiguration.GetConfig().ExcludeUserAgents;

if(Em.ExcludeUserAgentList.Count > 0)

{

foreach (ExcludeUserAgent ua in Em.ExcludeUserAgentList)

{

if (HttpContext.Current.Request.UserAgent.Contains(ua.keyword))

{

return;

}

}

}

UrlMatchEngine pu = WebsiteSkipConfiguration.GetConfig().SkipedUrls;

if (pu.UrlList.Count > 0)

{

foreach (SkipedUrl sk in pu.UrlList)

{

if (ls_city.Contains(sk.IpCity))

{

if (sk.UrlFrom.Length > 0)

{

if (sk.UrlFrom.Contains(ls_url) && !ls_url.Contains(sk.OutKeyWord))

{

if (sk.UrlTo.Length > 0)

{

HttpContext.Current.Response.Redirect(sk.UrlTo, true);

}

break;

}

}

break;

}

}

}

if (WebsiteSkipConfiguration.GetConfig().IpChecks.GetIpIn(ip))

{

ls_urlfrom = WebsiteSkipConfiguration.GetConfig().IpChecks.UrlFrom.Trim();

ls_urlto = WebsiteSkipConfiguration.GetConfig().IpChecks.UrlTo.Trim();

if (ls_urlfrom.Length > 0)

{

if (ls_urlfrom.Contains(ls_url) && !ls_url.Contains(WebsiteSkipConfiguration.GetConfig().IpChecks.OutKeyWord))

{

if (ls_urlto.Length > 0)

{

HttpContext.Current.Response.Redirect(ls_urlto, true);

}

}

}

}

}

catch

{

}

}

}

}

在部署方面,非常简单主要利用IHttpModule接口并在Web.config中的HttpModule节点添加此组件的配置,访问限制或允许参数可以在NetOpen_SystemWebsiteSkip.cfg.xml进行设置,以下为一个简单的配置示例:

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8" ?>

<NetOpen_System>

<WebsiteSkip>

<SkipedUrl>

<add ipcity="温州" urlfrom="http://examplesite.com/Default.aspx,http://examplesite.com/,http://examplesite.cn/,

http://www.examplesite.cn" urlto="http://wz.mainwebsite.pcom/index.aspx" outkeyword="math"/>

<add ipcity="镇江" urlfrom="http://examplesite.com/Default.aspx,http://examplesite.com/,http://examplesite.cn/,

http://www.examplesite.cn" urlto="http://jszj.mainwebsite.com/index.aspx" outkeyword="math"/>

</SkipedUrl>

<SkipedIP>

<add ip1="220.186.0.0" ip2="220.186.255.255" urlfrom="http://examplesite.com/Default.aspx,http://examplesite.com/,http://examplesite.cn/,

http://www.examplesite.cn" urlto="http://wz.mainwebsite.com/index.aspx" outkeyword="math"/>

</SkipedIP>

<ExcludeUserAgent>

<add keyword="Baiduspider">

<add keyword="Sosospider">

<add keyword="Sogou web spider">

<add keyword="Sogou inst spider">

<add keyword="Sogou-Test-Spider">

<add keyword="Sogou Orion spider">

<add keyword="Gigabot">

<add keyword="0JJJSpider">

<add keyword="Sogou Pic Spider">

<add keyword="Googlebot">

<add keyword="Yeti/1.0">

</ExcludeUserAgent>

</WebsiteSkip>

</WebsiteSkip>

</NetOpen_System>

赞助本站

人工智能实验室

相关热词: 自动跳转 asp net

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港