IIRF IIS6 重写在Framework2.0 升级Framework4.0
最近把原来的网站项目2.0升级到了4.0,网站发布时发现原来的伪静态除了详细页面等一些有后缀的页面能正常访问外,其余页面均找不到页面地址,报404错误。除了Framework版本不一样,其余没有任何修改。
ASP.NET 4.0在安装的时候,会在IIS6注册一个ISAPI Filter,叫做”aspnet_filter.dll”,ISAPI Filter会先于ISAPI处理程序前执行,它会在所有的的无后缀的URL后面加一串字符“/eurl.axd/GUID”, 同时ASP.NET 4.0还会在IIS默认添加一个请求映射规则“*.axd”,映射到aspnet_isapi.dll。此时,所有的无后缀URL加上“/eurl.axd/GUID”后都会变成带.axd后缀,这样就匹配*.axd的映射规则进行ASP.NET的处理通道。在进入ASP.NET通道后,ASP.NET处理程序会删除掉“/eurl.axd/GUID”,让它还原到无后缀的原始情况,并且不会对后续的请求处理带来任何影响。此时,所有的无后缀请求,就进入了ASP.NET的处理通道中,在默认情况下,ASP.NET4.0的全局的web.config中配置了DefaultHttpHandler来接收无后缀的URL请求,但是我们也可以随意更换默认处理程序(比如ASP.NET MVC处理程序)来处理无后缀的URL请求。
既然找到原因了,那么问题解决起来就没那么棘手了。
解决方案:
1、命令:regedit打开注册表,找到路径: HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/ASP.NET/4.0.30319.0
2、新建字符串值,取名:EnableExtensionlessUrls,并设置值为0
3、保存之后关闭注册表,并重启IIS,以读取新的注册表信息。
【感谢汪哥的博文!~~~】