我们正在将ASP Classic网站(实际上是一个较大网站下的虚拟目录)升级到ASP.NET 3.5。将有一些遗留目录仍然是ASP Classic。除此之外,每个.asp文件将被目录层次结构中相同位置的.aspx文件替换。我们不想破坏从其他地方进入网站的旧链接。该网站托管在IIS 6上(我们无法控制它)。
我的想法是,在IIS中,用aspnet_isapi.dll替换.asp文件的常用处理程序,asp.dll。 第一个问题:如果我这样做,那么.asp文件的请求是否会通过我创建并在web.config中注册的任何自定义HTTP模块进行路由?
然后我将创建一个连接到BeginRequest的HTTP模块,该模块将测试请求的路径(在任何查询字符串之前)是否以.asp结尾。如果是这样,它将检查物理文件是否存在。如果没有,那么我将使用HttpContext.RewritePath将“x”附加到“.asp”。否则,如果.asp文件存在,我将使用HttpContext.RemapHandler将处理程序切换回asp.dll,以便将文件作为ASP Classic文件处理。
第二个问题:这会有效吗? 第三个问题:我使用什么作为RemapHandler方法的参数?如何获取对ASP Classic处理程序实例的引用? (如果我知道第三个问题的答案,我就会自己尝试所有这些!)
更新:好的,我自己尝试过,除了我重命名剩余的.asp文件,以便扩展名为.aspc(ASP Classic),在IIS中我分配了旧的asp .dll作为他们的处理程序。然后,不是检查所请求的.asp文件是否存在并重新映射到ASP Classic处理程序(如果是),而是检查相应物理位置中是否存在除扩展名.aspc 之外的文件。如果是这样,我重写URL以附加“c”。这有效!因此,上面我的第一个问题的答案是“是”,我的第二个问题的答案是“是的,差不多,除了关于重新映射处理程序的部分是未知的”。但最好不要更改我所有遗留的.asp文件的扩展名,所以我留下了一个问题:原始的RemapHandler方法是否有效,如果有的话,它的论点是什么? ?
答案 0 :(得分:0)
您知道吗,您可以使用web.config文件并在IIS中重定向规则轻松处理此问题吗?
您需要激活描述here的URL Rewrite2模块。 这是IIS的一个非常好的功能,用于解决路由问题,有关示例,请参阅here。
考虑一下你的情况,我会按照以下方式做点什么:
<rule name="execute classic asp if file exists" stopProcessing="true">
<match url="(\w+\.asp)$" />
<conditions>
<add input="C:\Path\To\Your\WebApp\{R:1}.asp" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="{R:1}c" appendQueryString="true" />
</rule>
<rule name="execute dotnet otherwise" stopProcessing="true">
<match url="(\w+\.asp)$" />
<action type="Rewrite" url="{R:1}x" appendQueryString="true" />
</rule>
我不确定这里的所有RegEx是否适合你,但它意味着开始尝试。明确写C:\Path\To\Your\WebApp\
的原因是,我找不到将Web应用程序的基本路径作为参数的方法。