asp.netウェブサイトのトップページはIPによって自ら指定のページの例にジャンプします。
大・中型ウェブサイトについては、ユーザー体験を強化するために、多くの場合、異なる都市サイトのユーザーによって、それぞれの個性的なコンテンツをプッシュしたり、展示したりする必要があります。大手ポータルサイトのニュースには都市サイトの機能があります。もし該当する都市サイトが設置されていなければ、ユーザーが訪問したIPアドレスの所在都市によって自動的に設定されます。本論文は主にカスタム拡張IHttpModuleインターフェースを通じて、性能IPデータベースは主にQQwry純真IPデータベースを採用しており、主にIPアドレスまたはアドレスセグメントまたはIP所在都市に従って指定ページに自動的にジャンプする機能を実現しています。
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.co nfigの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>