导航

虚URL地址的实现思路

Posted on 2005-05-06 18:07  yfmine  阅读(721)  评论(0编辑  收藏  举报

下面的文章只是我自己的一种思路,不对的地方还请多指教
现在的BLOG注册后的帐号都是在网站域名后加一个目录,比如用帐号"dudu"注册后,直接访问www.cnblogs.com/dudu就可以了。但我猜想服务器不会为每个帐号创建一个目录,那如何实现的呢,虚URL是一种解决方法。其实说起来很简单,就是在Global.aspx的BeginRequest事件中捕捉用户请求的路径,如果有特定用户信息,则以这个用户为参数,重定向到服务器上特定的页面。比如:
  

<Script Language="C#" Runat="Server">

void Application_BeginRequest(object sender, EventArgs e) {
    
string strPageOwner;
    
string strCurrentPath;
    
string strUserPath;
    
string strUserName;
    
    strCurrentPath 
= Request.Path.ToLower();
    
//检查请求的路径是否为网站的实际页面,只有请求虚Url才重定向
    if (strCurrentPath.IndexOf( "/site/" ) == -1
        
&& strCurrentPath.IndexOf( "userpage.aspx" ) == -1 
        
&& strCurrentPath.IndexOf( "default.aspx" ) == -1
    
{
    strUserName 
= GetUserPathByUrl(Request.Path);//根据请求的路径得出用户信息
    strUserPath = String.Format("~/userpage.aspx?username={0}",strUserName );
    Context.RewritePath( strUserPath );
    }

}

//根据请求路径得出用户信息,如:/pentium/archive/33431.aspx,得出用户pentium
string GetPathByUrl(string strUrl)
{
    strUrl
=strUrl.Replace("/","\\");
    
while (strUrl.LastIndexOf("\\")!=0)
    
{
        strUrl
=System.IO.Path.GetDirectoryName(strUrl);
    }

    
if(strUrl.StartsWith("\\"))
        strUrl
=strUrl.Remove(0,1);            
    
return strUrl;
}

</Script>


更复杂的逻辑可以用httpModule实现,这仅仅是一种思路:截获用户请求的地址,得出所请求的信息,然后重定向页面