利用RewritePath和pathInfo实现URL重写及其优点

本文介绍如何使用URL重写技术将复杂的URL转换为简洁的形式,并详细解释了RewritePath方法的使用,特别是如何分离path、pathInfo和querystring,以便更好地管理和组织网站结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们经常使用:RewritePath(string path);来实现URL重写 ,它还具有3个参数的重载形式RewritePath(string filePath, string pathInfo, string queryString);其中filePath是重写路径 , queryString是查询字符串, pathInfo这个参数比较有意思,是指附加到filePath的信息. 可以在请求页面使用Request.PathInfo获取该参数的值. 看以下的URL重写片段代码: (来自Cuyahoga) 原URL:        /14/section.aspx/ForumView/2 重写规则:     <add match="(/d+)//section.aspx([/w|/]*)/??(.*)" replace="Default.aspx$2?SectionId=$1&amp;$3" /> 重写后的URL:  /Default.aspx/ForumView/2?SectionId=14&
string rewritePath = Regex.Replace(urlToRewrite, matchExpression, UrlHelper.GetApplicationPath() + mappings[i], RegexOptions.IgnoreCase | RegexOptions.Singleline); //rewritePath的值为:/Default.aspx/ForumView/2?SectionId=14& // MONO_WORKAROUND: split the rewritten path in path, pathinfo and querystring // because MONO doesn't handle the pathinfo directly //context.RewritePath(rewritePath); string querystring = String.Empty; string pathInfo = String.Empty; string path = String.Empty; // 1. extract querystring int qmark = rewritePath.IndexOf("?"); if (qmark != -1 || qmark + 1 < rewritePath.Length) {     querystring = rewritePath.Substring (qmark + 1);//截取?号后面的查询字符串 SectionId=14&     rewritePath = rewritePath.Substring (0, qmark);//  /Default.aspx/ForumView/2 } // 2. extract pathinfo int pathInfoSlashPos = rewritePath.IndexOf("aspx/"+ 4;//获取pathInfo的位置:"aspx/"后出现的字符串 if (pathInfoSlashPos > 3)//若存在"aspx/" {     pathInfo = rewritePath.Substring(pathInfoSlashPos);// pathInfo:"/ForumView/2"     rewritePath = rewritePath.Substring(0, pathInfoSlashPos);// rewritePath:"/Default.aspx" } // 3. path path = rewritePath; //path : "/Default.aspx" //pathInfo : "/ForumView/2" //querystring : "SectionId=14&" //执行重写 this._currentContext.RewritePath(path, pathInfo, querystring); rewrittenUrl = path + pathInfo; if (querystring.Length > 0) {     rewrittenUrl += "?" + querystring; }
    为什么不用RewritePath(rewritePath)直接进行重写呢? 通过pathInfo可以将URL的参数分为两个部分, 一部分是path+querystring , 一部分是pathInfo .     这种方式对于基于模块构建的系统就非常有用. 系统的主干部分用path+querystring参数  , 子模块用pathInfo参数 . 这样可以在子模块中处理关于自己的URL参数,添加子模块时不需要在系统的web.config 中添加子模块的URL重写规则.     还有一点 这样可以支持Mono
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值