开源Asp.Net论坛

阿强.Net

关注研究:设计模式,.Net Framework底层框架,Asp.net,WinForm开发,开源框架;

常用链接

统计

Winform开发

开源网址

朋友网站

网站制作

最新评论

应园友要求--讲述无扩展名的UrlRewrite实现(附源码)

以前的一篇关于UrlRewrite文章,UrlRewritingNet 完美实现 ASP.NET 2.0 中的URL重写(映射) .有一些园友留言对于无扩展名的UrlRewrite无法实现,如:http://www.xxx.com/Register,下面就把实现细节及注意事项说一下,还有问题的请下载源码

(1)在2003系统下,按照下图在IIS中设置添加统配符,另外注意圈红的地方.

(2)在XP系统下,在扩展名影射中,扩展名:.*,处理程序aspnet_isapi(感谢S.Sams提供思路).

2 站点中引入UrlRewrting.dll

3 Web.config配置修改如下:

<appSettings>
  <add key="SiteUrls" value="~/SiteUrls.config"/>
 </appSettings>

<httpModules>
   <add name="MyHttpModule" type="UrlRewriting.MyHttpModule,UrlRewriting"/>
  </httpModules>
  <httpHandlers>
   <add verb="*" type="UrlRewriting.Http404,UrlRewriting" path="404.aspx"/>
  </httpHandlers>

4 SiteUrls.config如下:

 

Code

 

5 测试

 

 

下载

posted on 2008-10-23 16:44 阿强.Net 阅读(4191) 评论(33) 编辑 收藏

评论

#1楼 2008-10-23 16:50 金色海洋(jyk)      

第一个图里的“扩展名”哪里去了?填什么呢?  回复 引用 查看   

#2楼 2008-10-23 16:53 放飞心情      

可惜,就登錄一下沙發就被人搶走了  回复 引用 查看   

#3楼 2008-10-23 16:54 栖山      

先收藏,后学习!  回复 引用 查看   

#4楼[楼主] 2008-10-23 16:56 阿强.Net      

--引用--------------------------------------------------
金色海洋(jyk): 第一个图里的“扩展名”哪里去了?填什么呢?
--------------------------------------------------------
2003站点属性>>站点目录>>配置
图上的是通配符影射,没有扩展名
 回复 引用 查看   

#5楼 2008-10-23 16:59 金色海洋(jyk)      

找到了,原来是点击下面的插入按钮。  回复 引用 查看   

#6楼 2008-10-23 17:02 Cheney Shue      

用apache就简单多了  回复 引用 查看   

#7楼 2008-10-23 17:07 Miser      

本打算也写1篇此类的文章,可惜时间问题。不过我个人觉得urlRewrite的效率不高,并在web.config中留下如此多的东西 实属恶心,建议大家自己实现一个。  回复 引用 查看   

#8楼 2008-10-23 17:09 Miser      

并且这样做会存在一个严重的问题,所有的东西都会被简单看作为asp.net处理,对于静态的东西 需要一个静态服务器  回复 引用 查看   

#9楼 2008-10-23 17:10 Q.Lee.lulu      

这个UrlRewriting没啥关系吧,扩展名主要是IIS设置问题而已....  回复 引用 查看   

#10楼[楼主] 2008-10-23 17:12 阿强.Net      

--引用--------------------------------------------------
Miser: 本打算也写1篇此类的文章,可惜时间问题。不过我个人觉得urlRewrite的效率不高,并在web.config中留下如此多的东西 实属恶心,建议大家自己实现一个。
--------------------------------------------------------
这个配置并不多,配置的目的,是为了增加程序的灵活性.
多处理一些逻辑,效率会有些损失,鱼和熊掌不能兼得
 回复 引用 查看   

#11楼 2008-10-23 17:14 Miser      

--引用--------------------------------------------------
阿强.Net: --引用--------------------------------------------------
Miser: 本打算也写1篇此类的文章,可惜时间问题。不过我个人觉得urlRewrite的效率不高,并在web.config中留下如此多的东西 实属恶心,建议大家自己实现一个。
--------------------------------------------------------
这个配置并不多,配置的目的,是为了增加程序的灵活性.
多处理一些逻辑,效率会有些损失,鱼和熊掌不能兼得
--------------------------------------------------------
并非是配置目录的问题,您一定么有认证的仔细阅读过urlRewrite的源码,我想LZ的水平一定能写出高效的
 回复 引用 查看   

#12楼 2008-10-23 17:16 很忙的闲人      

值得关注。  回复 引用 查看   

#13楼[楼主] 2008-10-23 17:20 阿强.Net      

--引用--------------------------------------------------
Miser: --引用--------------------------------------------------
阿强.Net: --引用--------------------------------------------------
Miser: 本打算也写1篇此类的文章,可惜时间问题。不过我个人觉得urlRewrite的效率不高,并在web.config中留下如此多的东西 实属恶心,建议大家自己实现一个。
--------------------------------------------------------
这个配置并不多,配置的目的,是为了增加程序的灵活性.
多处理一些逻辑,效率会有些损失,鱼和熊掌不能兼得
--------------------------------------------------------
并非是配置目录的问题,您一定么有认证的仔细阅读过urlRewrite的源码,我想LZ的水平一定能写出高效的
--------------------------------------------------------
这个只示例了如何实现,没有涉及urlRewrite的源码分析,有时间我会好好分析源码
 回复 引用 查看   

#14楼[楼主] 2008-10-23 17:20 阿强.Net      

--引用--------------------------------------------------
很忙的闲人: 值得关注。
--------------------------------------------------------
谢谢关注
 回复 引用 查看   

#15楼 2008-10-23 17:29 戏水      

每一个aspx都要写一个 <RewriterRule> ? 那不哭了嘛  回复 引用 查看   

#16楼[楼主] 2008-10-23 17:35 阿强.Net      

--引用--------------------------------------------------
戏水: 每一个aspx都要写一个 &lt;RewriterRule&gt; ? 那不哭了嘛
--------------------------------------------------------
这个地方是正则表达式,一会改一下
 回复 引用 查看   

#17楼 2008-10-23 17:37 Leven      

可以考虑使用.net 3.5 sp1中自带的System.Web.Routing组件,这个组件是完全可以运行在纯.net 2.0环境下的.  回复 引用 查看   

#18楼 2008-10-23 17:39 2008年的梦想      



"无法在“UrlRewriting”已存在的情况下创建/影像复制该文件。 "这是怎么回事,我的是xp系统。
 回复 引用 查看   

#19楼[楼主] 2008-10-23 17:44 阿强.Net      

--引用--------------------------------------------------
Leven: 可以考虑使用.net 3.5 sp1中自带的System.Web.Routing组件,这个组件是完全可以运行在纯.net 2.0环境下的.
--------------------------------------------------------
谢谢提醒,还没用2008
 回复 引用 查看   

#20楼[楼主] 2008-10-23 17:45 阿强.Net      

--引用--------------------------------------------------
2008年的梦想:

&quot;无法在“UrlRewriting”已存在的情况下创建/影像复制该文件。 &quot;这是怎么回事,我的是xp系统。
--------------------------------------------------------
重写组件是不是已经存在了
 回复 引用 查看   

#21楼 2008-10-23 17:53 NormRen刚刚要登陆[未注册用户]

截图还没截到点子上!!- -!  回复 引用   

#22楼 2008-10-23 17:55 NormRen刚刚要登陆[未注册用户]

推荐UrlRewriter.Net  回复 引用   

#23楼 2008-10-23 18:53 Lawson      

如果request参数是中文的urlencode后的编码,是不是转换不过来啊,比如:BoardList_%ab%cd(_%ab%cd是随便写的中文的编码后的效果),是不是转换不到BoardList.aspx?BigClassID=%ab%cd啊????
我换正则为(%\w\w)+,不知道哪里错了?
 回复 引用 查看   

#24楼 2008-10-23 22:52 canbeing      

LZ对URLRewrite了解得挺多的  回复 引用 查看   

#25楼 2008-10-24 08:50 时间太快      

UrlRewriting.dll这个类库的源码没提供?呵。  回复 引用 查看   

#26楼 2008-10-24 09:06 菜菜灰      

哪里有UrlRewriting.dll的源码~~~~  回复 引用 查看   

#27楼 2008-10-24 10:04 S.Sams      

UrlRewriting的关键不是 UrlRewriting.dll (对Windows2003的IIS6来讲), 而是IIS是否可以将无扩展名的地址交给 asp_isapi.dll 去解析.
如果你是用Vs.net的解析器, 它是将所有请求都交给 asp_isapi.dll 去解析的,
所以你在调试时是一定没问题的.
不知楼主有没有注意到这几点.
 回复 引用 查看   

#28楼 2008-10-24 10:11 secondflying[未注册用户]

xp下的IIS也是可以添加的,添加扩展名为.*就行。  回复 引用   

#29楼[楼主] 2008-10-24 10:19 阿强.Net      

--引用--------------------------------------------------
secondflying: xp下的IIS也是可以添加的,添加扩展名为.*就行。
--------------------------------------------------------
可以,谢谢提示.
 回复 引用 查看   

#30楼[楼主] 2008-10-24 10:21 阿强.Net      

--引用--------------------------------------------------
S.Sams: UrlRewriting的关键不是 UrlRewriting.dll (对Windows2003的IIS6来讲), 而是IIS是否可以将无扩展名的地址交给 asp_isapi.dll 去解析.

如果你是用Vs.net的解析器, 它是将所有请求都交给 asp_isapi.dll 去解析的,

所以你在调试时是一定没问题的.

不知楼主有没有注意到这几点.

--------------------------------------------------------
这篇文章其实就是针对这个问题,在VS.net中调试没问题,在IIS下,如不添加影射会出现404错误
 回复 引用 查看   

#31楼 2008-10-24 16:14 VisualStudio      

学习过程中……  回复 引用 查看   

#32楼 2008-10-24 17:44 liydotnet      

--引用--------------------------------------------------
戏水: 每一个aspx都要写一个 &lt;RewriterRule&gt; ? 那不哭了嘛
--------------------------------------------------------
我现在有一个项目中写了上100个规则,一但有修改,改得有都想死了。

下个版本打算自己写URLReWrite了
 回复 引用 查看   

#33楼 2008-11-08 10:07 JacksonLin      

经典.老到出汁,经典  回复 引用 查看