谁能给个最简的url重写的的代码? 比如:当点/pro.aspx?id=5 变成成 /pro/5反过来,url传来/pro/5 又要执行pro.aspx?id=5先整个简单的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 继承IHttpModule,看MSDN吧,很简单 如下是摘自网上的一段内容,供参考:----------------------------------------------URL重写是截取传入Web请求并自动将请求重定向到其他URL的过程。 比如浏览器发来请求hostname/101.aspx,服务器自动将这个请求中定向为http://hostname/list.aspx?id=101。 url重写的优点在于: 缩短url,隐藏实际路径提高安全性; 易于用户记忆和键入; 易于被搜索引擎收录; 实现URL重写的几个步骤: 第一: 下载MS的URLRewriter.dll,放到你的web程序的bin下 下载地址:download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi 第二: 下载完成后,在web.config里设置如下: <?xmlversion=\"1.0\"encoding=\"utf-8\"?> <!--overred--> <configuration> <configSections> <sectionname=\"RewriterConfig\"type=\"URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter\"/> </configSections> <RewriterConfig> <Rules> <RewriterRule> <LookFor>~/d(\\d+)\\.aspx</LookFor> <SendTo>~/default.aspx?id=$1</SendTo> </RewriterRule> </Rules> </RewriterConfig> <system.web> <httpHandlers> <addverb=\"*\"path=\"*.aspx\"type=\"URLRewriter.RewriterFactoryHandler,URLRewriter\"/> </httpHandlers> </system.web> </configuration> 其中 <sectionname=\"RewriterConfig\"type=\"URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter\"/> 用于指定配置节\"RewriterConfig\"的处理程序类的名称为”URLRewriter.Config.RewriterConfigSerializerSectionHandler”,该类存在于bin目录下的URLRewriter.dll文件中 关键的是这两句 <LookFor>~/d(\\d+)\\.aspx</LookFor> <SendTo>~/default.aspx?id=$1</SendTo> <LookFor>~/d(\\d+)\\.aspx</LookFor>表示,用户输入的url,d(\\d+)\\.aspx是url中文件名匹配的正则表达式(此处为字母d开头,后面跟一个或多个数字,并以.aspx结尾。用户也可根据自己的需要自行设定)。 [Page]<SendTo>~/default.aspx?id=$1</SendTo>,表示当服务器接收到符合上面条件的请求后如何重写url。此处表示访问defalutl.aspx并传入参数id,其值$1将用用户请求的文件名中的第一个数字来表示。 例如用户输入hostname/d11.aspx,服务器会把他重写为http://hostname/default.aspx?id=11。换句话说用户输入http://hostname/d11.aspx,实际访问的是http://hostname/default.aspx?id=11。这样就起到了隐藏真实文件名,并便于用户记忆的作用。 处理回发 在重写后的url里如果产生回发,例如有一个按钮,又调用了该被重写的aspx,用户浏览器中将会显示该aspx文件实际的地址,也就是http://hostname/default.aspx?id=11。但从用户的角度考虑,如果单击按钮时突然看到URL更改会使他们感到不安。因此必须解决这个问题。 解决方法有二: (1)自己定义一个Actionlessform类,在aspx中不再使用系统提供的form标记 namespaceActionlessForm { publicclassForm:System.Web.UI.HtmlControls.HtmlForm { protectedoverridevoidRenderAttributes(HtmlTextWriterwriter) { writer.WriteAttribute(\"name\",this.Name); base.Attributes.Remove(\"name\"); writer.WriteAttribute(\"method\",this.Method); base.Attributes.Remove(\"method\"); this.Attributes.Render(writer); base.Attributes.Remove(\"action\"); if(base.ID!=null) writer.WriteAttribute(\"id\",base.ClientID); } } } ----------------------------------------------url重写代码:RewritePath() 实现简单高效的URL重写代码protected void Application_BeginRequest(Object sender, EventArgs e) { Regex re = new Regex(@"^((/[^/0-9]+)+)(/[0-9]+(/[^/]+)*)\.aspx$", RegexOptions.Compiled); Match match = re.Match(HttpContext.Current.Request.Path); if(match.Success) { re = new Regex(@"/([^/]+)", RegexOptions.Compiled); MatchCollection matches = re.Matches(match.Result("$3")); string page = match.Result("$1")+".aspx?q0="+matches[0].Result("$1"); for(int i=1; i<matches.Count; i++) { page += "&q"+i+"="+matches[i].Result("$1"); } HttpContext.Current.RewritePath(page); //关键步骤 } }如://原始的URL:http://www.csdn.net/test/33/44.aspx //转换后URL:http://www.csdn.net/test.aspx?q1=33&q2=44 http://www.51aspx.com/CV/UrlReWriter/ 用UrlRewritingNet.UrlRewriter.dll吧,比较简单的一种,该文件也不大,网上一搜一堆,有源码下载 http://www.cnblogs.com/notus/archive/2007/03/13/673222.html lucene创建索引库时错误 lock obtain timed out loading 问题 点击按钮 显示loading checkbox控件没有被选中 恳求各位牛人来帮忙啊。。 共用dataset 在网页对话框中无法下载文件? 请问在asp.net中如何实现在文本框按下回车键后相当于按下tab键focus跳到下一个文本框 读取消息并输出到xml的问题。很急!在线等! 使用ASP.NET如何连数据库? 谁能解释? 高手请进(关于打印功能),分不够再加,谢谢! js控制隐藏和展开遇到的的问题(换用ajaxToolkitCollapsiblePanelExtender控件也这样的问题)
----------------------------------------------
URL重写是截取传入Web请求并自动将请求重定向到其他URL的过程。 比如浏览器发来请求hostname/101.aspx,服务器自动将这个请求中定向为http://hostname/list.aspx?id=101。
url重写的优点在于:
缩短url,隐藏实际路径提高安全性;
易于用户记忆和键入;
易于被搜索引擎收录;
实现URL重写的几个步骤: 第一:
下载MS的URLRewriter.dll,放到你的web程序的bin下
下载地址:download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi
第二:
下载完成后,在web.config里设置如下:
<?xmlversion=\"1.0\"encoding=\"utf-8\"?>
<!--overred-->
<configuration>
<configSections>
<sectionname=\"RewriterConfig\"type=\"URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter\"/>
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/d(\\d+)\\.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<addverb=\"*\"path=\"*.aspx\"type=\"URLRewriter.RewriterFactoryHandler,URLRewriter\"/>
</httpHandlers>
</system.web>
</configuration>
其中
<sectionname=\"RewriterConfig\"type=\"URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter\"/> 用于指定配置节\"RewriterConfig\"的处理程序类的名称为”URLRewriter.Config.RewriterConfigSerializerSectionHandler”,该类存在于bin目录下的URLRewriter.dll文件中 关键的是这两句
<LookFor>~/d(\\d+)\\.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo> <LookFor>~/d(\\d+)\\.aspx</LookFor>表示,用户输入的url,d(\\d+)\\.aspx是url中文件名匹配的正则表达式(此处为字母d开头,后面跟一个或多个数字,并以.aspx结尾。用户也可根据自己的需要自行设定)。 [Page]
<SendTo>~/default.aspx?id=$1</SendTo>,表示当服务器接收到符合上面条件的请求后如何重写url。此处表示访问defalutl.aspx并传入参数id,其值$1将用用户请求的文件名中的第一个数字来表示。
例如用户输入hostname/d11.aspx,服务器会把他重写为http://hostname/default.aspx?id=11。换句话说用户输入http://hostname/d11.aspx,实际访问的是http://hostname/default.aspx?id=11。这样就起到了隐藏真实文件名,并便于用户记忆的作用。 处理回发
在重写后的url里如果产生回发,例如有一个按钮,又调用了该被重写的aspx,用户浏览器中将会显示该aspx文件实际的地址,也就是http://hostname/default.aspx?id=11。但从用户的角度考虑,如果单击按钮时突然看到URL更改会使他们感到不安。因此必须解决这个问题。
解决方法有二:
(1)自己定义一个Actionlessform类,在aspx中不再使用系统提供的form标记 namespaceActionlessForm
{
publicclassForm:System.Web.UI.HtmlControls.HtmlForm
{
protectedoverridevoidRenderAttributes(HtmlTextWriterwriter)
{
writer.WriteAttribute(\"name\",this.Name);
base.Attributes.Remove(\"name\");
writer.WriteAttribute(\"method\",this.Method);
base.Attributes.Remove(\"method\");
this.Attributes.Render(writer);
base.Attributes.Remove(\"action\");
if(base.ID!=null)
writer.WriteAttribute(\"id\",base.ClientID);
}
}
}
url重写代码:RewritePath() 实现简单高效的URL重写代码protected void Application_BeginRequest(Object sender, EventArgs e)
{
Regex re = new Regex(@"^((/[^/0-9]+)+)(/[0-9]+(/[^/]+)*)\.aspx$", RegexOptions.Compiled);
Match match = re.Match(HttpContext.Current.Request.Path); if(match.Success)
{
re = new Regex(@"/([^/]+)", RegexOptions.Compiled);
MatchCollection matches = re.Matches(match.Result("$3")); string page = match.Result("$1")+".aspx?q0="+matches[0].Result("$1");
for(int i=1; i<matches.Count; i++)
{
page += "&q"+i+"="+matches[i].Result("$1");
} HttpContext.Current.RewritePath(page); //关键步骤
}
}如:
//原始的URL:http://www.csdn.net/test/33/44.aspx
//转换后URL:http://www.csdn.net/test.aspx?q1=33&q2=44