在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近,朋友的搜索引擎快开发完成。现在还有些前台的工作需要完成。比如说搜索界面,展示界面,数据分页,搜索建议等等。因为整个产品是基于C#开发的,所以在做搜索页面(Search.aspx)通过查询字符串wd来查询。参考Baidu的搜索页面,比如说搜索博客园,就会在地址栏显示http://www.baidu.com/s?wd=博客园,通过wd定位搜索的关键字。如是想着把我们的Search.aspx,做成s?wd=博客园的样子,有什么好处呢?有很多,此处省略100字。采用什么技术,我用的是URLRewriter。 要使用URLRewriter,首先要把URLRewriter添加到引用。然后在web.config中添加响应的配置节。要使当在地址栏输入http://www.applls.com/s?wd=博客园,自动在Search.aspx处理发的请求。我是按以下操作配置的,我的测试环境 Win7+IIS7.0+VS2008。 1:在configSections节点中添加 <section name="RewriterConfig" requirePermission="false" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter" />节点。name的名称是可以随意更改的。 2:根据自己要匹配的Url配置映射。我在地址栏要匹配s?wd=博客园, 在configuration中添加 在第1步section节点的和name名称相同的RewriterConfig节点。结构如下
<RewriterConfig>
<Rules> <RewriterRule> <LookFor>~/s?wd=([a-z,A-Z,0-9]+)</LookFor> <SendTo>~/demo.aspx?wd=$1</SendTo> </RewriterRule> <RewriterRule> <LookFor>~/s</LookFor> <SendTo>~/demo.aspx</SendTo> </RewriterRule> </Rules> </RewriterConfig> 3:在httpHandlers节点配置以下节点,意思是对s的请求由URLRewriter.RewriterFactoryHandler,URLRewriter处理
<add verb="*" path="s" type="URLRewriter.RewriterFactoryHandler,URLRewriter" />
4:在modules节点添加以下配置,
<add name="ModuleRewriter" type="URLRewriter.ModuleRewriter,URLRewriter" />
5:在handlers节点下配置以下节点。
<add name="urlrequestc" verb="*" path="s" type="URLRewriter.RewriterFactoryHandler,URLRewriter" />
经过以上配置,当在地址栏请求s?wd=博客园时,后台会自动在search.aspx页面处理。 扩展下, 1:如果在地址栏请求([a-z,A-Z,0-9]+).aspx文件,都映射到Demo.aspx页面处理。添加新的配置 <RewriterRule> 在handlers里加入<add name="urlrequest" verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler,URLRewriter" /> 就可解决问题。 2:如果在地址栏请求([a-z,A-Z,0-9]+).html,都映射到Demo.aspx页面处理,这个就是所谓的伪静态化。 <RewriterRule> 在httpHandlers里加入<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler,URLRewriter" /> 在handlers里加入<add name="urlrequest" verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler,URLRewriter" /> 可解决以上问题。 3:如果请求指定后缀文件如([a-z,A-Z,0-9]+).yoolo,都映射到Demo.aspx页面处理。利用这个,以后我们开发aspx页面就可以把后缀定义成我们喜欢的后缀了。 <RewriterRule> 在httpHandlers里加入<add verb="*" path="*.yoolo" type="URLRewriter.RewriterFactoryHandler,URLRewriter" /> 在handlers里加入<add name="urlrequest" verb="*" path="*.yoolo" type="URLRewriter.RewriterFactoryHandler,URLRewriter" /> 另外说明一下, 现象A:web.config配置节中 httpHandlers 和 Handlers 的区别。在看下了MSDN 的帮助文档,上面说httpHandlers 是基于IIS6.0以前的配置,而Handlers 是基于IIS7.0的配置。所以在匹配每个映射的时候 httpHandlers 和 Handlers 都要各自配置一次。 现象B:在配置映射时,如果只配置 handlers节点 而不配置 httpHandlers。IIS7.0下是可以进行URL重写的。启动VS2008浏览页面而无法进行URL重写。所以我估计VS2008启动的端口是模拟IIS6.0的web服务环境,它和IIS7.0是不同的。 基于以上两种现象不知道自己理解的是否正确。URL重写 还有一些其他应用,大家也可以跟帖说明下。 URLRewriter整个Dll的代码很短,所以就反编译了下,并生产了cs类文件。如果需要调试跟踪,可以附加到自己的项目中,需要可以在这里下载。 酒装的不好,希望大家多多指点。欢迎拍砖。 |
请发表评论