ror*_*yok 4 asp.net iis-7 isapi-rewrite global-asax
我们运行一个链接重定向服务,它可以处理以各种格式抛出的链接.例如,这些格式之一是将目标URL附加到链接的末尾
HTTP://url.fwd/abcd/http://www.mydomain.com/page.aspx
这是在过去两年中在Windows Server 2003/IIS6上运行的,但现在我们正在尝试迁移到Windows Server 2008/IIS7设置,它不再起作用了.
我已经读过URL中冒号的问题,但它不会影响不以'.aspx'结尾的页面.例如,
HTTP://url.fwd/abcd/http://www.mydomain.com/page.php
会重定向好.
HTTP://url.fwd/abcd/http//www.mydomain.com/page.aspx
也工作正常(注意缺少第二个冒号).尽管URL错误,但它确实由我们的URL转发系统处理,该系统使用自定义404页面.在旧系统上,我们遇到了类似的问题,因此在Global.asax> Application_Error中专门编写了一个方法来处理'.aspx'的情况,并且它工作正常.
在我们的新服务器上,Application_Error永远不会被Global.asax抛出.相反,我得到一个System.NotSupportedException - "不支持给定路径的格式".这个System.NotSupportedException是我们在Global.asax页面中处理的确切情况,因此它绝对不会被触发.
我已经更改了几个论坛帖子中指示的注册表项,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET VerificationCompatibility = 1 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP |参数AllowRestrictedChars = 1
我已经尝试更改.aspx的Handler Mappings设置.
我已经尝试将应用程序池设置为使用经典模式而不是集成,但这会导致完全不同的错误,其中静态内容(如图像和CSS)根本不显示.我已经检查过在Windows功能中启用了静态内容,它确实如此.在经典模式下,'.aspx'请求会抛出两个错误请求错误,绝对没有任何信息.我得到的错误页面的代码是字面上的
错误请求<html> <body>错误请求</ body> </ html>
更新:我已将静态文件处理程序映射更改为此页面中的表单 http://improve.dk/blog/2006/12/11/making-url-rewriting-on-iis7-work-like-iis6 但是正如作者正确指出的那样,这是一种黑客行为,而不是在IIS7下做事的正确方法.它还只修复了经典模式下的静态文件问题.'.aspx'页面仍然在经典模式下抛出错误.
在这一点上,任何想法或意见都会受到高度赞赏.
小智 7
IIS 7解决方案
IIS 7中的简单解决方案是在web.config文件中添加一个设置,以告知IIS通过Global.asax事件处理所有请求.只需在web.config中添加或更改此部分即可启用请求:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)