利用Mircosoft URLRewriter.dll实现页面伪静态[原]

昨天,转贴了一篇利用ISAPI筛选器来实现URL伪静态的文章,我按照文章上的内容做,可是没有做出来,目前看来,该方法没有使用Microsoft URLRewriter.dll这个方法好,至少我个人觉得,花了一个晚上的时间,终于研究出来了怎么利用这个dll文件来对asp.net页面实现静态化了,其实很简单。
一,获得Mircosoft URLRewriter.dll:
获得Mircosoft URLRewriter.dll可以到http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true
这里,选择[下载本文的源代码],下载完毕后,导入工程,我这里没有对该工程做任何修改,保留了原来的重写方式,然后直接在VS2005里面生成.dll文件就可以了。
二,使用该dll文件:
添加引用,搞定。
三,页面方面的设计,这里不在赘述了,我会放一个下载包,有兴趣的朋友下载来看看吧,代码写的比较乱。
四,web.config的配置
这部是非常关键的,也是静态化能否成功的关键。
<?xml version="1.0"?>
<configuration>
  
<configSections>
    
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
  
</configSections>

  
<RewriterConfig>
        
<Rules>
            
<RewriterRule>
                
<LookFor>~/web/new/type/(.[0-9]*)\.html</LookFor>
        
<SendTo>~/web/new.aspx?id=$1</SendTo>
            
</RewriterRule>
      
<RewriterRule>
        
<LookFor>~/web/index.html</LookFor>
        
<SendTo>~/web/index.aspx</SendTo>
      
</RewriterRule>
        
</Rules>
    
</RewriterConfig>
    
<system.web>
    
<httpHandlers>
      
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
      
<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
    
</httpHandlers>
        
<compilation debug="true"/></system.web>
</configuration>

这里简单介绍一下:
<RewriterConfig>
   
<Rules>
   
<RewriterRule>
      
<LookFor>要查找的模式</LookFor>
      
<SendTo>要用来替换模式的字符串</SendTo>
   
</RewriterRule>
   
<RewriterRule>
      
<LookFor>要查找的模式</LookFor>
      
<SendTo>要用来替换模式的字符串</SendTo>
   
</RewriterRule>
   
</Rules>
</RewriterConfig>
httpHandlers的设置主要是配合IIS将请求重新定义处理,这里也比较关键,如果不存在合理的httpHandlers,那么,访问肯定会失败的。

关于正则表达式,可以到百度里搜索:"常用正则表达式",会有很多。

五.配置IIS解析.html文件
右键点我的电脑-->管理-->展开'服务和应用程序'-->internet信息服务-->找到你共享的目录-->右键点击属性 -->点击'配置'-->映射下面 -->找到.aspx的可执行文件路径 复制路径-->粘贴路径-->扩展名为".html"-->然后把检查文件是否存在的勾去掉这样就可以了,如果遇到“确定”按钮失效,可以用键盘事件编辑路径即可解决。

本文实例下载:http://files.cnblogs.com/zhangyi85/StaticWeb.rar
posted @ 2008-04-20 01:40 张谊 阅读(1173) 评论(48)  编辑 收藏 所属分类: ASP.net

  回复  引用  查看    
#1楼 2008-04-20 13:12 | zitsing      
第5步是必须得做吗??如果不做会有什么后果呢??
如果不是自己的服务器,这一步是很难做的。例如虚拟空间!

  回复  引用  查看    
#2楼 [楼主]2008-04-20 14:08 | 张谊      
@zitsing
在虚拟主机上可以联系主机提供商为你添加该项设置,一般来说都会为你添加的,如果不做就实现不了httpHandlers了。
  回复  引用  查看    
#3楼 2008-04-20 15:29 | BoyLee      
@zitsing
虚拟主机直接弄成。aspx后缀好了
如果可以改IIS,那就弄成目录形式的。目录式URL优先级高
  回复  引用  查看    
#4楼 2008-04-24 14:53 | PerfectDesign      
恩.............
不知道这个dll性能咋样
  回复  引用    
#5楼 2008-05-07 08:57 | lwt_2005qq [未注册用户]
伪静态是个不错的东东,但不知道为什么,我照着你说的去做,老是提示
错误 “无法识别的配置节 RewriterConfig”
  回复  引用  查看    
#6楼 [楼主]2008-05-07 13:48 | 张谊      
@lwt_2005qq
你可以下载一下我写的源代码,看看到底是哪儿的问题呢?
这样的问题一般都是在web.config里写错了位置导致的。
  回复  引用    
#7楼 2008-05-07 14:49 | lwt_2005qq [未注册用户]
很感谢你的回复.
你的代码我下下来了,但里面没有数据库.是不是不能直接运行呀.我用的是vs2005,Sql2000server,我想问一下.我直接将你代码里的URLRewriter.dll引到我的程序的bin里面,可以实现url伪静态吗?我引了一次,但是在web.config里面我按照你写的程序编写时,为什么在web.config 提示中没有类似的<RewriterConfig><Rules><RewriterRule> <LookFor><SendTo>这些节点的提示啊,是不是我引用错了.你可不要笑话我呀,对这个我还真不懂.你能不能给我发过一个简单点的例子,我下下来可以运行的.我真的想看到期待的结果.这几天从网上找了很多这方面的文章,但仍没有进展.对了我能加你的QQ吗?我的是QQ:626541701.

  回复  引用  查看    
#8楼 [楼主]2008-05-08 17:34 | 张谊      
@lwt_2005qq
你好,感谢你对我的博客的关注!~
这个代码里的数据库呢,其实并不是一个必须有,其实现伪静态的关键,并不是数据库,而是那个Dll,至于你的web.config里没有那样的标签,你可以手动的写进去的,看编译的时候会不会出错,如果正确的话,是不会出错的,这个例子已经很简单的了,使用这个Dll不用对IIS做任何的配置即可实现了,如果还有问题,可以继续给我发邮件。

  回复  引用  查看    
#9楼 [楼主]2008-05-08 17:35 | 张谊      
  回复  引用    
#10楼 2008-05-09 13:05 | lwt_2005qq [未注册用户]
不好意思,又得打扰你了.(感觉你是一个很热心的人.)
已配置文件扩展名映射(右键点击默认网站,选择”属性-主目录-配置-映射”)
可执行文件: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
扩展名:.html
动作:全部动作
(勾掉”检查文件是否存在”)
我自己做了一个小例子,包含两个页页(Default.aspx和detail.aspx),想实现伪静态,实现打开Default.aspx的时候显示为Default.html.我将urlrewrite.dll引进工程,配置好web.config.但运行的时候还是达不到我想要的结果.(头疼)
web.config:
<configuration>

<configSections>
<section name="RewriterConfig" type ="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter"/>
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>detail/type/(.[0-9]*)\.html</LookFor>
<SendTo>detail.aspx?id=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>Default.html</LookFor>
<SendTo>Default.aspx</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<appSettings/>
<connectionStrings/>
<system.web>
<httpHandlers>
<add verb ="*" path ="*.aspx" type ="URLRewriter.RewriterFactoryHandler,URLRewriter"/>
<add verb ="*" path ="*.html" type ="URLRewriter.RewriterFactoryHandler,URLRewriter"/>
</httpHandlers>
你的邮箱是什么?要不我把我做的发给你看看.你帮我查查怎么回事.你能加上我的QQ吗?QQ:626541701.

  回复  引用  查看    
#11楼 [楼主]2008-05-09 18:43 | 张谊      
@lwt_2005qq
你可以发邮件到zhangyi_vip@163.com或MSN:dataset@live.cn
  回复  引用    
#12楼 2008-05-11 08:47 | lwt_2005qq [未注册用户]
我把我的例子发到你的邮箱里面了.麻烦你帮我看一下吧.
  回复  引用  查看    
#13楼 [楼主]2008-05-11 18:53 | 张谊      
@lwt_2005qq
我把你的例子改好了,很简单的一个错误,你看看。
  回复  引用    
#14楼 2008-05-12 08:53 | lwt_2005qq [未注册用户]
呵呵!~
非常感谢!我终于看到了想要的结果.很高兴认识了你这个朋友.
我在项目里又添加了一个Default.html文件(空的),这样页面打开后就是Default.html了.但传值的URL(http://localhost/example/detail.aspx?id=2)自已不会自动的生成(http://localhost/example/detail/type/1.html)
但手动改写的也可以显示.说明方法是正确的.
非常感谢!

  回复  引用  查看    
#15楼 [楼主]2008-05-12 10:15 | 张谊      
@lwt_2005qq
不用谢,传值的URL可以在做页面的的时候,先把格式改写好就可以了。
  回复  引用    
#16楼 2008-05-25 00:02 | rakor [未注册用户]
添加第五步以后,会造成访问真正的html文件出现文件不存在的错误
  回复  引用  查看    
#17楼 2008-05-26 15:37 | superman.net      
<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
跟IIS里配有区别吗,自己有主机是不是配置IIS性能更加好一点呢?
  回复  引用  查看    
#18楼 [楼主]2008-05-26 16:50 | 张谊      
@superman.net
这里是添加*.html的扩展,目的是捕获地址栏里输入*.html的地址,自己有主机也需要配置IIS里的Html扩展。
  回复  引用  查看    
#19楼 2008-05-27 16:58 | superman.net      
@张谊
那为什么我在本机上不用配置IIS,只在WEB.CONFIG里添加了<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> 就可以实现了呢?
  回复  引用  查看    
#20楼 [楼主]2008-05-29 09:17 | 张谊      
@superman.net
这就不太清楚了,我在测试的时候是如果不配置IIS,那么是无法实现的,至于你为什么能实现,估计是你以前添加过.html的扩展吧。
  回复  引用    
#21楼 2008-06-02 17:26 | webprogram [未注册用户]
楼主,我按你的步骤做下来好象和13楼是一样的问题。请问13楼错在哪点
  回复  引用  查看    
#22楼 [楼主]2008-06-03 17:18 | 张谊      
@webprogram
你把你做的发到我邮箱吧,我帮你看看
dataset@live.cn
  回复  引用    
#23楼 2008-06-12 10:23 | lixinhua [未注册用户]
--引用--------------------------------------------------
rakor: 添加第五步以后,会造成访问真正的html文件出现文件不存在的错误
--------------------------------------------------------
同意16楼的说法,访问真正的html文件出现文件不存在的错误,怎么解决处理。
  回复  引用  查看    
#24楼 2008-06-17 08:28 | 陈超群      
真正的html文件可以改成htm
  回复  引用    
#25楼 2008-06-26 16:32 | lisha [未注册用户]
热心的博主:请问我的伪静态程序为什么在本机浏览不了呢?我也在IIS加了筛选器.我的程序竟然在本机上就是index.html,about.html这样的文件,打开来一看全是直接读取数据库的代码呢.
  回复  引用  查看    
#26楼 [楼主]2008-06-26 22:23 | 张谊      
@lisha
请把你的源代码发到我的邮箱吧dataset@live.cn我帮你看看。
  回复  引用    
#27楼 2008-06-27 16:11 | lisha [未注册用户]
博主:
你好!
先谢谢你的热心帮助,谢谢,非常感谢!!!
已经给你发了邮件了.
  回复  引用  查看    
#28楼 [楼主]2008-06-28 10:19 | 张谊      
@lisha
我收到了您的邮件,但是您给我的mofile地址我无法下载。
  回复  引用    
#29楼 2008-06-30 10:44 | lisha [未注册用户]
博主:
先谢过你的热心帮助.
我又给你发了邮件,上次不好意思,自己没有测试一下能不能下就发给你了.
这次我测试好了,地址在邮件里发了,要登录可以下,我把下载的用户密码也写在邮件里了.
  回复  引用  查看    
#30楼 [楼主]2008-06-30 12:33 | 张谊      
@lisha
您好,我收到了您的邮件了,我打开里面全是*.html结尾的和*.asp的文件,请问是这个吗?如果您想静态化这样的站点,那不用修改web.config,只需要改IIS的httpd.ini文件里加规则就可以了。
  回复  引用    
#31楼 2008-07-02 17:00 | lisha [未注册用户]
谢谢博主!!!
是的,就是那些.html的文件,其实除了product.html其它的全是asp的文件,包括首页也是.html的样子,是我改成.asp的.
我在本机浏览不了,改IIS的httpd.ini文件里加规则就可以在本机浏览吗?可是我不太懂怎么改,博主能给我一个详细一点的方法吗?谢谢了
  回复  引用  查看    
#32楼 [楼主]2008-07-02 19:35 | 张谊      
@lisha
你好,你可以去看看http://www.discuz.net/viewthread.php?tid=903180&highlight=%BE%B2%CC%AC%BB%AF这个地址,这个是Discuz的修改httpd.ini文件实现论坛页面静态化的,asp的就是利用的这个思想,如果你对正则表达式不太熟悉,请百度一下“正则表达式”,有问题欢迎交流!~祝你好幸运!~
  回复  引用  查看    
#33楼 [楼主]2008-07-02 19:39 | 张谊      
@lisha
还有一点,我这里所说的静态是利用的web.config里的规则,来进行URL地址的重写,并不是真正利用静态模板技术来实现的重写,所以,在源文件中是不会出现*.html的文件的。
  回复  引用    
#34楼 2008-07-03 18:17 | lisha [未注册用户]
谢谢博主的耐心解答.
Thanks!!!
  回复  引用    
#36楼 2008-07-16 17:46 | lwf [未注册用户]
博主,你好,我看了你的这方法,我跟着做了一到四步, <RewriterRule>
<LookFor>~/web/index.html</LookFor>
<SendTo>~/web/index.aspx</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>这样我访问成功了,我现在要 <RewriterRule>
<LookFor>~/web/new/type/(.[0-9]*)\.html</LookFor>
<SendTo>~/web/new.aspx?id=$1</SendTo>
</RewriterRule>
这一部分不成功,
别第五步,非得配置吗?谢谢
  回复  引用  查看    
#37楼 [楼主]2008-07-16 23:11 | 张谊      
@lwf
是的,第五步非常关键的,必须配置,如果您的机器以前配置过,当然可以不用配置了,其实就是加一个*.html的解析。
  回复  引用    
#38楼 2008-07-17 11:54 | lwf [未注册用户]
博主,你好, 谢谢你的耐心解答,我配置好了 第五步也通过了,我现在有个疑问,如我的“default.aspx”里面列表的链接全是"test.aspx?id=1,test.aspx?id=2",这个test.aspx,我映射到了1.html,2.html,我想问的是,我在给default.aspx中的列表加链接的时候是<a href ="<%#Eval("id") %>.html"><%#Eval("id") %></a>,还是和以前一样的写成:<a href ="test.aspx?id=<%#Eval("id") %>"><%#Eval("id") %></a>,
谢谢
  回复  引用  查看    
#39楼 [楼主]2008-07-17 19:59 | 张谊      
@lwf
我没有看到您的源代码,但是按照我的理解的意思是,您想让您的链接表现为X.html这样对吗?如果是这样的话,只需要写<a href ="<%#Eval("id") %>.html"><%#Eval("id") %></a>这样就可以了。如果还有问题,欢迎继续留言。

  回复  引用    
#40楼 2008-07-21 15:31 | lwf [未注册用户]
谢谢你的耐心解答!
  回复  引用    
#41楼 2008-07-28 16:24 | 圣天雷 [未注册用户]
看到你这篇受益匪浅呢~ 崇拜ing... 服务器已经调试成功了,所有调用的页面都没有问题,但是到用户中心的登录功能时发现了一个小小问题,用ASP.NET获取到的地址不正确,无论Request.Url、Request.ServerVariables("SCRIPT_NAME")得到的都是原本的.aspx页面地址,而且还不带任何参数……不知高人有否方法获取到伪静态的地址啊?
  回复  引用    
#42楼 2008-07-29 13:04 | 游客 [未注册用户]
@圣天雷
你试试request.querystring["string"].tostring();没有呢?
  回复  引用    
#43楼 2008-07-31 16:45 | 圣天雷 [未注册用户]
@42楼
我要的是地址栏里的伪静态地址啊……

另外,今天又遇到一个问题,web.config里好像不能写&号?我想通过伪静态传两个参数,结果xxx.aspx?key1=$1&key2=$2这一行无法通过语法验证,导致web.config失效,网站不能运行。
  回复  引用    
#44楼 2008-08-18 19:23 | yushangbo [未注册用户]
楼主:
在虚拟空间里不用配置IIS可以实现url重写吗
  回复  引用    
#45楼 2008-08-27 13:54 | XXXX [未注册用户]
不知道你把源代码预编译什么意思,代码看不见还叫人去下你到 代码,连接数据库的语句都不知道你在那写的,还要什么连接语句,日
  回复  引用  查看    
#46楼 [楼主]2008-08-27 23:40 | 张谊      
@XXXX
您好,首先,我放在这里的StaticWeb.rar里面没有任何连接数据库的代码,其次,这个文件编译与否并不影响您的代码阅读,就只需要导入一个DLL到Bin目录下,并且全部的转发规则都写在了web.config里面,没有任何地方是隐藏或者故意隐瞒了关键代码的,那样的话,我发上来还有什么意思呢?
  回复  引用  查看    
#47楼 [楼主]2008-08-27 23:42 | 张谊      
@XXXX
其次,我在文中提到的选择[下载本文的源代码],是指下载Mircosoft URLRewriter.dll文件,不是下载本文的实例代码,本文的实例代码下载地址为文章最后的地址,当然,如果您也可以直接下载StaticWeb.rar,因为里面已经包含了Mircosoft URLRewriter.dl,请您看清下载地址。
  回复  引用  查看    
#48楼 [楼主]2008-08-27 23:43 | 张谊      
@yushangbo
您好,最近比较忙,很少来,关于虚拟主机里的不设置IIS的问题,其实就是加一个.html的扩展,一般来说,在虚拟主机提供商都回为您添加了的,如果没添加请他们添加一下就可以了,欢迎交流:)

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: