重写路径在IIS 7.5集成模式下不工作

重写路径在IIS 7.5集成模式下不工作,iis,httpmodule,rewritepath,Iis,Httpmodule,Rewritepath,在HttpModule中使用HttpContext.RewritePath进行URL重写时遇到问题 环境:Windows Server 2008 R2、IIS 7.5集成模式、.Net 4.0 在我的项目中,大多数URL将被重写到同一个aspx页面(Handler.aspx)。aspx页面将根据URL执行不同的操作 例如: “/en/abc/”将写入Handler.aspx。[页面输出:这里是abc] “/en/test/”将写入Handler.aspx。[页面输出:这是测试] “/en/tes

在HttpModule中使用HttpContext.RewritePath进行URL重写时遇到问题

环境:Windows Server 2008 R2、IIS 7.5集成模式、.Net 4.0 在我的项目中,大多数URL将被重写到同一个aspx页面(Handler.aspx)。aspx页面将根据URL执行不同的操作

例如:

“/en/abc/”将写入Handler.aspx。[页面输出:这里是abc]

“/en/test/”将写入Handler.aspx。[页面输出:这是测试]

“/en/test/a.html”也将写入Handler.aspx。[页面输出:这是测试]。由于我只检查字符串“test”并忽略sting“/a.html”,因此输出与URL“/en/test/”相同。而且wwwroot文件夹中不存在a.html,URL对于测试来说是一个不好的例子

如果两个或更多包含htm/html扩展名的请求同时出现,我遇到了一个问题 示例:“/en/test/a.htm”或“/en/test/a.html”

HttpContext.RewritePath将不适用于此后的任何请求。Handler.aspx将不再被调用,页面输出将始终为“This is test”,无论输入什么URL。出现问题时,Http状态代码为200。此外,如果访问真实的aspx页面(Handler.aspx),它也将显示相同的内容“This is test”。它看起来像一个服务器端缓存。这个问题可以通过在IIS中回收应用程序池来解决

在以下情况下,不会出现问题:

  • 延迟访问这两个请求,例如先访问“/en/test/a.html”并等待3-5秒,然后再次访问“en/test/a.html”。一切正常

  • 将IIS管道从集成模式更改为经典模式。如果访问“/en/test/a.html”,将显示IIS 404页面

  • 使用Server.Transfer而不是HttpContext.RewritePath,一切正常

  • URL包含.php、.jsp、.xml不会导致此问题

  • 我必须找到它的根本原因。是否有任何潜在原因可能导致此问题