在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 /”相同。并且www.html文件夹中不存在a.html,URL是测试的不良案例。
如果包含htm / html扩展名的2个或更多请求同时出现,我就遇到了问题 示例:“/ en / test / a.htm”或“/en/test/a.html”
之后,HttpContext.RewritePath将不适用于任何请求。 Handler.aspx将不再被调用,无论输入什么URL,页面输出将始终为“This is test”。问题发生时,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,一切正常。
网址包含.php,.jsp,.xml不会导致问题
我必须找到它的根本原因。任何潜在的原因可能导致这个问题?