发布BlogEngine.NET 3.3.5.0 出现 HTTP 错误 404.2 和404.0

最近无意中看到BlogEngine.NET 3.3.5.0 已经发布了,提供了新的标准模板,于是下载到一台测试服务器中看看效果,发现后台的某些菜单无法打开,会出现404.2或者404.0错误。根据不同情况,主要和IIS的ISAPI和CGI限制的设置,处理程序映射模块,URL地址错误有关系。

先说下服务器环境,系统为windows server 2008 R2,IIS版本为7.5,应用程序池.NET版本为V4.0,BlogEngine.NET使用的数据库是Ms SQLServer。服务器是一台用于测试的服务器,配置什么的比较乱,修改的乱七八糟。

这里要提及重要的一点,官方推荐的托管管道模式为集成模式,如果使用经典模式又没有设置好ISAPI 和 CGI 限制(没有添加和启用.NET 4.0的aspnet_isapi.dll),很有可能会出现404.2错误,具体错误信息如下:

错误摘要

HTTP 错误 404.2 – Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面。

详细错误信息

  • 模块 IsapiModule
  • 通知 ExecuteRequestHandler
  • 处理程序 ExtensionlessUrlHandler-ISAPI-4.0_64bit
  • 错误代码 0x800704ec
  • 请求的 URL http://localhost:80/admin/
  • 物理路径 E:/BlogEngine.NET 3.3 (web)/admin/
  • 登录方法 匿名
  • 登录用户 匿名

最可能的原因:

  • 找不到此请求的处理程序映射。可能要安装某个功能。
  • 服务器上未启用请求的资源的 Web 服务扩展。
  • 扩展的映射指向的位置不正确。
  • 扩展在浏览器或 Web 服务器中拼写错误。

可尝试的操作:

  • 请安装处理此请求的功能。例如,如果您收到 .ASPX 页的这一错误,则可能需要通过 IIS 安装程序来安装 ASP.NET。
  • 确认服务器上启用了请求的 Web 服务扩展。
    1. 打开 IIS 管理器并定位到服务器级别。
    2. 在“功能”视图中,双击“ISAPI 和 CGI 限制”以确认 Web 服务扩展被设置为“允许”。
    3. 如果该扩展不在列表中,请在“操作”窗格中单击“添加”。
    4. 在“添加 ISAPI 和 CGI 限制”对话框中,在“ISAPI”或“CGI 路径”框中键入 .dll 或 .exe 文件的路径,或者单击“浏览”导航到相应文件的位置。
    5. 在“描述”框中,键入该限制的简要说明。
    6. (可选)选中“允许执行扩展路径”以使限制可以自动运行。如果不选中此选项,则限制状态将为“不允许”,这是默认状态。您可以在以后选中此选项并单击“操作”窗格中的“允许”来允许该限制。
    7. 单击“确定”。注意: 请在确认您的 Web 服务器需要此 Web 服务扩展或 CGI 之后再将其添加到列表中。
  • 确认扩展的位置正确。
  • 确认扩展的 URL 在浏览器和 Web 服务器中均拼写正确。

错误截图如下:

HTTP 错误 404.2-Not Found截图

可尝试的操作

具体解决方法其实错误信息提供的可尝试操作都仔细说明了,我的情况就是没有在启用aspnet_isapi.dll,详细步骤如下,首先打开IIS的ISAPI 和 CGI 限制:

打开ISAPI和CGI限制

可以看到默认ASP.NET V4.0的aspnet_isapi.dll是被禁用的,开启后即可解决问题,要注意64位和32位都要开启:

开启ASP.NET V4.0

如果没有添加,要注意32和64位的aspnet_isapi.dll都要添加。

  • 64位的地址:C:/Windows/Microsoft.NET/Framework64/v4.0.30319/aspnet_isapi.dll
  • 32位的地址:C:/Windows/Microsoft.NET/Framework/v4.0.30319/aspnet_isapi.dll

另外如果应用程序池使用的是集成模式,如果遇到404错误信息:

错误摘要

HTTP 错误 404.0 – Not Found 您要找的资源已被删除、已更名或暂时不可用。

详细错误信息

  • 模块 IIS Web Core
  • 通知 MapRequestHandler
  • 处理程序 StaticFile
  • 错误代码 0x80070002
  • 请求的 URL http://localhost:80/admin/{{SiteVars.RelativeWebRoot}}admin/
  • 物理路径 E:/BlogEngine.NET 3.3 (web)/admin/{{SiteVars.RelativeWebRoot}}admin/
  • 登录方法 BlogEngine.NET Custom Identity
  • 登录用户 admin

最可能的原因:

  • 指定的目录或文件在 Web 服务器上不存在。
  • URL 拼写错误。
  • 某个自定义筛选器或模块(如 URLScan)限制了对该文件的访问。

可尝试的操作:

  • 在 Web 服务器上创建内容。
  • 检查浏览器 URL。

具体错误截图如下:

发布BlogEngine.NET 3.3.5.0 出现 HTTP 错误 404.2 和404.0

发布BlogEngine.NET 3.3.5.0 出现 HTTP 错误 404.2 和404.0

这里依然先仔细阅读错误信息,一般根据提供的信息都可以解决问题。我遇到的是请求的URL错误,本来是要打开文章管理页面,正确的路径应该是这样的:/admin/#/content/posts,但是页面请求的URL不正确,我调整了URL后就可以正常打开了。

其实以前也常常遇到类似错误,不过当时没有做相关的笔记,还没有培养记录的好习惯,记得最头疼的一次要使用到失败请求跟踪功能去追踪具体的错误,后面问题解决了。一般来说类似的问题主要出现在应用程序池配置,ISAPI和CGI限制设置,处理程序映射,请求的URL路径以及文件,还有就是权限问题了。另外由于是测试服务器,上面还挂载了很多测试用的网站,甚至还有PHP的网站,也不排除一些配置上出现冲突。

关于失败请求跟踪功能建议看下这两篇文章:

  • Troubleshooting Failed Requests Using Tracing in IIS 7
  • Troubleshoot IIS7 errors like a pro

另外这里有个可以参考的相同问题:

  • ASP.NET MVC on IIS falls through to the static file handler



原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/98902.html

(0)
上一篇 2021年8月21日
下一篇 2021年8月21日

相关推荐

发表回复

登录后才能评论