2011-03-09 57 views
0

我认为这应该是一个简单直接的问题,但经过太久的努力之后,我将不得不寻求帮助。如何通过ASP.NET/IIS 6中的模式自动重定向URL?

我需要的是将我的Web应用程序的所有请求都重定向到匹配以下模式 - “^(http://[^/]+/blogs/[^/.]+)/?$”到“$1/Default.aspx”的路径。

(使用英语,而不是正则表达式:http://myapp/blogs/randomdirthatdoesntexist - >http://myapp/blogs/randomdirthatdoesntexist/default.aspx

在“博客”的子目录物理上不存在,而是与请求第三方产品交易,以randomdir/Default.aspx的”,但是当你去“randomdir /”你404找不到,这就是我想解决的问题。

我试过使用global.asaxHttpHandler,但我不能让他们中的任何一个启动对这些404路径的请求。

所以,总之,我应该怎么做做重定向不存在目录的路径吗?

谢谢。

回答

1

我通过将IIS中的404错误页面设置为您创建的页面来完成类似的操作。该页面可以访问正在请求的页面,并执行一些额外的逻辑。所以404的randomdirthatdoestetexist /仍然发生,但404处理程序注意到这一点,并重定向到randomdirthatdoesntexist/default.aspx。

我翻出我的旧代码和调整它一点点地做你的过于简单化的方式所需要的,但我没有任何地方IIS6测试:

protected void Page_Load(object sender, EventArgs e) 
{ 
    String sQueryString = Request.RawUrl.Substring(Request.FilePath.Length); 
    Regex rx = new Regex(@"^\?(?<errorcode>\d+);(?<args>.*)$", RegexOptions.ExplicitCapture | RegexOptions.Compiled); 
    Match m = rx.Match(sQueryString); 


    if (m.Success) 
    { 
     if (m.Groups["errorcode"].Value == "404") 
     { 
      String sArgs = m.Groups["args"].Value; 
      Uri requestedUri = new Uri(sArgs); 

      // You can now check the value of uri and perform redirection... 
      if (requestedUri.ToString().EndsWith("/")) 
      { 
       Response.Redirect(requestedUri + "Default.aspx") 
      } 
     } 
    } 
    Response.StatusCode = 404; 
} 
+0

谢谢,我最终将IIS中的404和403错误页面引用到了我的HttpHandler中,就像一个魅力一样 – yellowblood 2011-03-09 13:15:55

0

使用一个Custom HttpModule或Http处理程序,该程序在Http Request管道中足够早地定位,以便在确定任何可能的404响应之前适当地引导您的请求。

查看我自己的SO问与答; Server.Transfer or Server.RewritePath了解更多详情。

+0

我不明白,从这个答案我应该怎么把我的HttpHandler放在前面。 – yellowblood 2011-03-09 13:16:52

+0

@yellowblood在web.config中添加HttpModule,它可以在Application_BeginRequest中使用Server.Transfer中的自定义代码来改变HttpRequest的服务器上的目标。这就是URL重写的常用方法。还有Application_EndRequest可以在返回客户端之前修改响应。本文可能会给你一个更好的主意; http://www.4guysfromrolla.com/articles/011404-1.aspx – 2011-03-10 01:57:52

+0

感谢您澄清,如果我再次面对这个问题,这似乎是一个更好的方式来做到这一点。 – yellowblood 2011-03-10 11:06:20