web.config 加入如下节: 
    <httpModules> 
      <add name="UrlReWriteModule" type="UrlReWrite.UrlReWriteModule, UrlReWriteModule"/> 
    </httpModules> 
UrlReWriteModule.cs如下:using System;
using System.Data;
using System.Configuration;
using System.Web;
namespace UrlReWrite
{    /// <summary>
    /// UrlReWriteModule 的摘要说明
    /// </summary>
    public class UrlReWriteModule : System.Web.IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }        private void context_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;   
            HttpContext context = application.Context;
            //HttpContext context = ((HttpApplication)sender).Context;
            // 获取旧的Url
            string url = context.Request.Path.ToLower();
            // 重写Url
            context.RewritePath("111.html");    
        }        public void Dispose()
        {
        }
    }
}
配置如下: 在iis6.0中建立一个站点:站点IP:192.168.1.55 目录指向:website1目录,在website1下建立一个index。html文件,内容就是输出1111,在iis中主目录->点击配置->出现的界面点击“添加”->在出现的添加界面添加 扩展名为 .html 文件过滤 可执行文件指向:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll 动作是全部。
可是当我访问index.html时候应该会转向 111.html 可是会发生死循环,难道。net2.0不能用这样的重新转向了。
UrlReWriteModule.cs文件如果是在 。net1.1下 同样的操作同样的配置,访问index.html可以转向111.html,为什么在。net2.0下不可以。希望做过的高手指点一下。

解决方案 »

  1.   

    老实讲我看不出问题来,不过你可以在2.0的global文件里做带扩展名的重写而且方便的多,出问题容易查
      

  2.   

    其实你可以在自己的环境里调式,访问index.html的时候,执行httpModules吗
      

  3.   

    string url = context.Request.Path.ToLower();
                // 重写Url
                context.RewritePath("111.html");这里不需要判断么,如果是111则不执行RewritePath
      

  4.   

    我发的就是一个例子,我在重新定向的代码哪里要加一个逻辑的,在vs2005中调试的时候,如果不指定iis站点,调试通过可以顺利的到达111.html,也就是执行了httpModules中定义的类,如果建立站点并指定ip 然后在iis中 建立扩展名为 .html 文件过滤 可执行文件指向:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll 动作是全部。 后就循环执行context_BeginRequest() 方法,不懂为什么!!
      

  5.   

    我知道了,因为你重写到111.html也是一个html所以,就进入死循环了所以要重写最好是aspx到html的重写如果html重写到html又添加对aspnet_isapi.dll 的映射,就不断的重写了
      

  6.   


    怎么还不明白string url = context.Request.Path.ToLower();
                if(url 不等于 111.html)
    {
                context.RewritePath("111.html"); 
    }
      

  7.   

    谢谢 楼上的兄弟 你的意思我明白了,程序没有问题,我感觉应该是 iis的问题,可是我找不问题出在哪里,其实就是不重新定向也会循环执行context_BeginRequest方法,            HttpApplication application = (HttpApplication)sender;  
                HttpContext context = application.Context; 
                // 获取旧的Url 
                string url = context.Request.Path.ToLower(); 
                // 重写Url 
                context.RewritePath("111.htm"); 
    比如我重新定向到111.htm 不是111.html 因为我iis中扩展名没有加.htm监控,程序正常运行,也就是说如果我处理了一个.html类型的文件就不能再转到一个.html的连接地址,这让我很郁闷,为什么 2003下可以 2005下不行 同样的配置。不知道我这样说你懂了没有。
      

  8.   


    这个我懂我不明白为什么2003下如果重新定向.html没有问题,2005下就不行了呢!
      

  9.   

    你可以在你重定向后的URL字符串做判断,包含某个字符串例:"rewrite"
    而重定向以前的url则没有这个字符串也就是说,你在WEB下加个文件夹,命为rewrite,html文件都放在里
    if(url.indexof("rewrite")>0)
    {return;//不要再去重写了}这也是个临时办法..呵呵,至于为什么,我明天再查查
      

  10.   

    谢谢 兄弟了 你说得这个不能解决我的问题,我现在要转向所有的 .html文件 转向后的文件也是.html,不管我是不是写return都是死循环,如果转到 .htm后缀的在iis中不加.htm后缀的话是可以出循环的。我就是没有搞明白为什么会这样。
    还是非常谢谢你的兄弟。
      

  11.   

    在iis中主目录->点击配置->出现的界面点击“添加”->在出现的添加界面添加 扩展名为 .html 文件过滤 可执行文件指向:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll 动作是全部。
    ------------------
    这是以前用isp筛选器时用的我今天测了一下,在Global.asax中是不需要的,Global.asax是继承httpModule的,所以
    httpModules应该也不用添加对html的解释
      

  12.   

    谢谢 楼上兄弟 可是如果不加 扩展名为 .html 文件过滤 可执行文件指向:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll 动作是全部。运行网上上的一个.html文件是没有办法 运行IHttpModule 
    接口的这个我是试验了的也就是没有办法执行转向了,比如首页是 111.html 不过不添加过滤,他就返回111.html的内容,根本达不到转向的效果了,这个破问题困惑了好几天了,真是郁闷。
      

  13.   

    还有就是我试验了 .aspx文件 比如我建立一个 111.aspx 同样调用IHttpModule 
    接口中的代码 我直接转向 222.aspx页面 就没有问题不会出现循环调用。html就不行。
      

  14.   

    我怎么调试都是好的啊。。你给个email
    我把demo发给你