【问题标题】:IIS 7 Not Serving Default DocumentIIS 7 不提供默认文档
【发布时间】:2011-08-04 21:21:10
【问题描述】:

我们的一些开发人员工作站出现问题:访问没有文件名的 URL(例如 http://localhost/)时,IIS 7 返回 404 错误。每个人都在运行 Windows 7/IIS 7.5 和 ASP.NET 4.0。应用程序池配置为使用经典管道模式。

启用默认文档,default.aspx在默认文档列表中。

我启用了失败的请求跟踪,并在日志中看到:

OldHandlerName="", NewHandlerName="ExtensionlessUrl-ISAPI-4.0_64bit", 
  NewHandlerModules="IsapiModule", 
  NewHandlerScriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll", NewHandlerType=""

稍后,我看到这个 IsapiModule 正在拒绝请求:

ModuleName="IsapiModule", Notification="EXECUTE_REQUEST_HANDLER", HttpStatus="404",
  HttpReason="Not Found", HttpSubStatus="0", 
  ErrorCode="The operation completed successfully. (0x0)", ConfigExceptionInfo="" 

看起来 IIS 认为 ExtensionlessUrl-ISAPI-4.0-64bit 应该处理请求。当我查看该模块的配置时,它显示它应该匹配路径*.,所以我很困惑为什么它没有匹配路径。

从 2005 年开始,Google 搜索出现了 this post on the IIS.net forums。不幸的是,没有提供任何解决方案,只是承认问题。

当我更新我的应用程序池以使用集成模式时,问题就消失了。不幸的是,它必须在经典模式下运行。

如何让 IIS 再次为我们的默认文档提供服务?

【问题讨论】:

  • 了解您是否安装了 Windows7 SP1 或修补程序 KB980368。我对这个修补程序(已纳入 SP1)有一些恶作剧:stackoverflow.com/questions/5080837/…
  • @Kev 谢谢。您链接到的知识库文章似乎可以解释我遇到的问题。
  • 奇怪,我遇到了同样的问题,但我的工作在经典模式下,但不是在集成模式下(我必须使用)。
  • 我刚刚通过将应用程序池切换到集成模式解决了这个问题。

标签: iis-7.5


【解决方案1】:

看起来微软发布了an update that enables the ExtensionlessURL HTTP handler to work with extensionless URLs。不幸的是,这会破坏某些其他处理程序。就我而言,经典应用程序池下的 DefaultDocument 处理程序。解决方案是删除我们应用程序的 web.config 中的 ExtensionlessURL 处理程序:

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrl-ISAPI-4.0_32bit" />
    <remove name="ExtensionlessUrl-ISAPI-4.0_64bit" />
    <remove name="ExtensionlessUrl-Integrated-4.0" />
  </handlers>
</system.webServer>

【讨论】:

  • 这解决了我的 index.php 没有被调用的问题。我已经为运行 PHP 的嵌套应用程序配置了经典模式下的应用程序池。
  • 请注意,这对我来说不起作用 - 它需要是“ExtensionlessUrlHandler-Integrated-4.0”。
  • 这解决了我遇到的问题。感谢您发布此内容,否则我可能永远不会偶然发现此内容。 Dylan 在字符串中是正确的,并不完全准确,但处理程序干扰 IIS 默认文档设置这一事实是一个关键发现。
【解决方案2】:

我解决了问题,将 HandlerMapping 中的“StaticFile”处理程序放在“ExtensionlessUrlHandler-*”前面

【讨论】:

  • 这对我也有用。我正在运行一个混合网站,一个旧的迁移 asp.net 2 站点以及 MVC5,升级到 MVC5 后我的默认文档(奇怪的是它不是静态页面,我的默认页面是 Default.aspx,后面有大量代码),然后将 StaticFile 移到 Extensslessurlhandler-ISAPI-4.0_32bit 和其他 2 个 extensionlessUrlhander 之上,对问题进行了排序。哼!这次真是万分感谢!请注意,这会使您的 Web 配置变得一团糟,因为手动将处理程序“移动”到提到的其他处理程序之上,将移动您的 web.config 中列出的所有处理程序。
  • 当接受的答案没有时,这也对我有用。就我而言,我有一个 index.html,我想成为主页,但我需要无扩展处理程序来防止我的 web api 设置中断。
【解决方案3】:

我注意到从应用程序池中删除托管 .NET 框架 (4.0) 时,它也为我解决了问题!

我们在 IIS 环境中根本不使用 .NET!

【讨论】:

    【解决方案4】:

    在 IIS 中将默认文档设置为网站应用程序时,更改 StaticFile 顺序有助于解决问题,而根网站也有另一个默认文档。

    【讨论】:

      【解决方案5】:

      在添加/删除 Windows 功能中将 DefaultDocument 组件添加到 IIS,然后插入我的默认脚本的名称 (index.php) 对我有用。

      【讨论】:

        【解决方案6】:

        我在 web.config URL Redirect 中使用以下规则来解决这个问题:

         <system.webServer>
            <rewrite>
              <rules>
                <rule name="Default document rewrite" stopProcessing="true">
                  <match url="^(.+/)?$" />
                  <action type="Redirect" url="https://{HTTP_HOST}/default.aspx" />
                </rule>
              </rules>
            </rewrite>
          </system.webServer>
        

        【讨论】:

          猜你喜欢
          • 2011-06-02
          • 1970-01-01
          • 2012-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多