源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

asp.net网站首页根据IP自动跳转指定页面的示例

  • 时间:2020-07-26 11:28 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:asp.net网站首页根据IP自动跳转指定页面的示例
对于大中型网站,为了增强用户体验,往往需要根据不同城市站点的用户推送或展现相应个性化的内容,如对于一些大型门户网站的新闻会有城市站点的功能,如果没有设置相应的城市站点,默认就是根据用户访问的IP地址的所在城市自动设置。本文主要通过自定义扩展IHttpModule接口,考虑到性能IP数据库主要采用QQwry纯真IP数据库,主要实现根据IP地址或地址段或IP所在城市进行自动跳转到指定页面的功能(支持Nginx作为前端反向代理服务器),该WebsiteSkip组件核心代码如下:
[u]复制代码[/u] 代码如下:
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进行设置,以下为一个简单的配置示例:
[u]复制代码[/u] 代码如下:
<?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>
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部