IIS7 上的共享托管。无法使用“StaticFileModule”处理程序访问资源

IIS7 上的共享托管。无法使用“StaticFileModule”处理程序访问资源

我有用于存放图片和样式的目录,以及一个Web.config文件(使用 Orchard)。其中Web.config有一行代码在我的共享主机上导致问题(在 WebMatrix 中运行良好):

  <system.webServer>
    <handlers accessPolicy="Script,Read">
      <!--
      iis7 - for any request to a file exists on disk, return it via native http module.
      accessPolicy 'Script' is to allow for a managed 404 page.
      -->
      <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />
    </handlers>
  </system.webServer>

当我尝试访问该目录中的任何文件时,我得到 500 页:

500 - 内部服务器错误。
您查找的资源存在问题,无法显示。

当我删除该行时

<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />

它显示资源。

如何在不改变Web.config每个目录中包含要直接访问的文件的情况下修复此问题?

答案1

我认为你不能(我的意思是在共享主机上)。

错误清楚地说:“无法添加类型为‘add’、且唯一键属性为‘name’设置为‘StaticFile’的重复集合条目”。这意味着name="StaticFile"在配置层次结构的某个上方位置已经有一个条目(在父文件夹中的另一个 web.config 中...或者最有可能是全局 Web 服务器配置中)。

要解决此问题,您必须先删除现有的配置行。在添加您自己的处理程序之前,您必须<remove name="StaticFile" />在您的部分中添加行<handlers>,例如:

<system.webServer>
    <handlers accessPolicy="Script,Read">
        <remove name="StaticFile" />
        <!--
        iis7 - for any request to a file exists on disk, return it via native http module.
        accessPolicy 'Script' is to allow for a managed 404 page.
        -->
        <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read"/>
    </handlers>
</system.webServer>

如果您可以完全控制您的服务器(但您没有,因为您使用的是共享主机),您可以StaticFile从全局 IIS 配置中删除处理程序...但这样做明智吗?<remove...>对于这两种情况,添加此行都是正确的方法。

相关内容