这两天接手了一个MVC模式的新项目,获取源码之后,部署测试环境遇到的问题,没错就是标题所说的403.14,相信很多开发者都跟我一样,看到这个的时候,瞬间想到是不是没有设置默认文档,然后设置好了之后,程序仍然报错,然后就百度,结果百度基本上都是重新注册.netFramework版本、配置文件里新增节点等等,我基本上把百度上的都试了之后,信心大打折扣,因为都是大同小异,而且还不能解决问题的答案,后来经过多次实践,然后猛然有了一个灵感,试了一下,竟然解决了,然后就开心的来CSDN进行分享了。
首先说说403.14这个问题出现的原因吧:
1、很多人看到403.14就认为是 禁止访问,因为在 Web 服务器上已拒绝目录列表 一般情况站点都是不会允许直接读取目录内容的,如果您的站点目录没有有效的默认文档(例如index.html,index.htm,index.asp或default.asp等),那么当客户直接输入该站点的域名+目录名进行浏览的时候将会出现该错误。
2、在IIS配置时没有启用目录浏览功能;
3、IIS没有注册对应的framework版本;
4、应用程序池版本与应用程序不合;
5、服务器上Web的物理路径错误;
相信很多开发者都跟我一样,即使是MVC我们也同样相信了上面两种可能的原因,然后按照上面的步骤去进行解决:
a、选中发布的网站,在右边的默认文档中新增index.html、defaut.aspx、甚至是MVC的控制器名\视图名;
b、使用 IIS 管理器启用目录浏览。 打开 IIS 管理器,然后 在“功能”视图中,双击“目录浏览”,然后 在“目录浏览”页上,在“操作”窗格中单击“启用”;
c、在WebConfig中的<system.webServer> 节点中新增<modules runAllManagedModulesForAllRequests="true" /> 节点;
d、以管理员身份打开cmd,运行C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i,重新注册.NET Framework;
e、修改发布文件的物理路径;
f、修改应用程序池的版本的模式等等;
然而这些试完之后,程序仍然还是报403.14的错误,有没有心都炸了的,没错,我的心当时也炸了,然后抽了支烟喝了杯水,心静下来后,想了下,本地是开发环境,各种组组件都是齐全的,自然发布在本地出现403.14很明显是以上几种原因,但是服务器和本地IIS环境还是有区别的,然后我看了下我的解决方案引用,发现很多引用都没有复制到本地,我当时猜想,会不会是因为缺少DLL呢,但是以往出现缺少DLL的时候浏览器中直接报错,提醒你缺少DLL啊,不管了,死马当活马医咯,然后我将解决方案的引用都改为了复制到本地,然后重新发布,复制到服务器后,替换掉服务器的所有文件,重启IIS,然后访问网站,果然,可以正常访问了。
原来,服务器上的环境虽然也有framework对应的版本,但是开发过程中很多DLL没有在发布包的bin文件中,IIS无法解析,导致能够正常反问改Web,但是报错403.14,相信这次的经历也给我们来发者提醒了一下,就是引用最好是复制到本地,那么发布的时候,IIS出现问题的概率就会小很多了,大家共勉,希望能够帮助到各位码友,如果有其他问题或解决方案,欢迎沟通与交流。