无废话,直接上干货。原来的网站(ASP.NET Form)是运行在 IIS6 上的,并且使用了通配符脚本映射使请求转向防盗链模块。今天将网站迁移到 IIS7 上。由于网站在Application_Start的时候试用了HttpContext做初始化,暂时让网站运行在经典模式下。在添加了通配符脚本映射之后却屡报403错误。
经查,原因如下:
(1)原有的被保护资源是虚拟目录下的静态文件,原虚拟目录的访问权限是“读取”。
(2)在 IIS6 环境下,通配符脚本映射忽略 IIS 虚拟目录的访问权限设置,因此即使虚拟路径并没有设定“执行脚本”的权限,HttpModule也能够正常的触发执行。但是 IIS7 下这个行为有所变动,通配符脚本映射需要相应的目录具有相应的权限。
(3)这样由于我配置的通配符映射需要执行脚本,但是被保护的目录仅有“读取”权限从而导致了403错误。
修正如下:
(1)赋予被保护的静态文件目录“执行脚本”权限;
(2)将该目录下的aspx,ascx等脚本映射均导向拒绝执行的模块,防止产生安全问题。
搞定。