• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    asp.net网站首页根据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(@"~\IpData\qqwry.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 querystring乱码解决方法
    下一篇:asp.net无法获取iis目录的问题解决方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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