当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET教程:URL重写的实现

ASP.NET
赫赫大名的A*寻路算法(vb.net版本)
asp.net(c#)下Jmai去说明 使用与下载
[原创]完美解决Could not load file or assembly ''AjaxPro.2'' or one of its dependencies. 拒绝访问。
asp.net下gridview 批量删除的实现方法
用CSS实现图片倾斜 只支持IE
.net get set用法小结
vs 不显示行号的操作方法
ASP.NET页面进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
ASP.Net不执行问题一解
asp.net 无限分类
让VS2008对JQuery语法的智能感知更完美一点
扩展方法ToJSON() and ParseJSON()
asp.net下PageMethods使用技巧
Linq to SQL Delete时遇到问题的解决方法
实现ASP.NET多文件上传程序代码
ASP.NET AJAX 1.0 RC开发10分钟图解
asp.net get set用法
ASP.NET下使用WScript.Shell执行命令
asp.net2.0实现邮件发送(测试成功)
Asp.net 无限级分类实例代码

ASP.NET教程:URL重写的实现


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 63 ::
收藏到网摘: n/a

最近有个朋友要做url重写的东西,我帮他弄了弄,回头看当年自己写的那个文章,当时以为自己写的很容易理解.但现在再看却觉得写的不好.而今天百度了一下urlrewriter发现我这个文章竟然排第二.为了方便更多朋友,我再写点东西补充下.

一般用百度搜的朋友都是对这个不了解但又急需要用的,我想,再多的语言也比不过一句代码.于是我把今天帮朋友时候写的一个小例子传了上来.这个小例子的目的是实现对任意url的重写(但不包括二级域名的,有需要二级域名的也可以先了解下url重写的概念). 这个小项目的制作过程如下

  1. 需要对诸如http://song2.cn/viewnews/2009/3/2.html的url进行重写.将其重写为http://song2.cn/viewnews.aspx?id=2&year=2009&month=3
  2. 下载微软的那个URLRewriter.dll,使用这个对url进行重写.

我们来看这个url, http://song2.cn/viewnews/2009/3/2.html(当然也可能是3.html,6.html,7.html).要重写,首先是截获url请求,然后分析当时的url,最后跳转到相应的页面.所以我们第一步是要截获url请求.为此新建一个类库叫URL,在该类库中引用URLRewriter.dll.新建一个类myrewritter.cs,代码如下

namespace URL
{
    public class myrewritter : URLRewriter.BaseModuleRewriter
    {
        protected override void Rewrite(string requestedPath, HttpApplication app)
        {
            if (requestedPath.Contains("viewnews/2009/3/2.html"))
                app.Context.RewritePath("/viewnews.aspx?id=2&year=2009&month=3");
            else
                app.Context.RewritePath("/here.aspx");
        }
    }
}

可以看到该类继承了URLRewriter.BaseModuleRewriter,然后在Rewrite方法中加入了我们自己的逻辑.现在,只要当前的url请求是viewnews/2009/3/2.html,我们就会将页面重写到/viewnews.aspx?id=2&year=2009&month=3.

这只是一个简单的例子,实际上对于url的判断,一般是用正则表达式来完成.而页面和页面间的对应关系,可能需要通过查询数据库完成.

接下来在网站项目中引用这个类库.然后修改下web.config,下面是我的web.config

<?xml version="1.0"?>

<configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
        <httpModules>
            <add type="URL.myrewritter"  name="URL" />
        </httpModules>       
        <compilation debug="true" />    
        <authentication mode="Windows" />
    </system.web>
</configuration>

大家可以看到我新加了个httpModules.这个的作用是,如果有url请求,asp.net会先把请求传到你指定的这个类中来.add那一行了,前面的是要接收请求的类,后面的是这个类所在的dll的名字.

添加完这一句后,一切就快结束了.由于我们要处理的是.html的页面,所以需要配置下iis.因为默认asp.net的处理引擎不会管.html.我们要做的是用处理asp.ent的那个程序来处理html页面.打开iis.找到你的网站,点右键打开属性.找到主目录(Home Directory),打开配置(Configuration)对话框. 在Application extensions(抱歉我不知道这个在中文系统里叫什么)列表里找到.aspx,点击编辑(Edit...),复制Executable框的内容.比如我的是:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll. 然后点击Add,在打开的对话框里, Executable把刚才复制的路径粘贴到这里,extension填写html,然后确定保存.这样我们就把对.html页面的请求交给了asp.net.

全部完成了,编译下项目(中文环境叫 生成),打开url http://localhost/mytest/viewnews/2009/3/2.html,看会不会重写到http://localhost//viewnews.aspx?id=2&year=2009&month=3

下面是我的例子的全部文件,大家可以下载然后看看.看一句代码比看十句话都管用,对吧

要注意的是,我的例子中,web网站的url配置成了http://localhost:8011,你可能需要更改下这个配置.方法是在网站项目上点右键,打开属性.然后在Web页面中修改.

作为一个初学者,可能对这些东西感觉挺烦的.如果你不想看长篇大论,那最好的办法就是看下我的代码.我最近在学flex,对有些新东西也是处于忍无可忍的状态.春天到了,大家都比较烦躁,所以,静下心来,慢慢来.

源码下载:rewrittertest.rar